`

Collection集合根接口、两个子接口list和set

    博客分类:
  • j2se
 
阅读更多

 

 第一:由数组的缺点来引入集合:

   1.数组只能保存相同的数据类型的数据

   2.数组的长度是不可变的

 

第二:集合的引入

  1.长度可变的数组。集合的容量随着元素的个数自适应变化
  2.可以保存任意类型的元素。

 

第三:Collection根接口和List子接口

1.Collection是根接口(是个接口)

2.List是Collection的子接口(有序的集合也称序列):允许重复元素的出现。放入集合的数据和取出集合的数据一致,list集合有索引存在(这点跟数组一样有下标)

3.set是Collection的子接口,不能出现重复元素的集合,最多包含一个null(因为两个null就重复了)。也就是说不能包含obj.equals(obj2)==true

 

第四:List接口中实现类

   (一):Vector实现类:

1.用索引(下标)访问元素,

2.是一个可以自动增长的数组(其实低层就是个数组),

3.数组在定义的时候就要定义好长度,因此长度不可变。而vector如果不定义大小的话就默认开辟一个大小为10的空间(其实就是十个开间的数组,如果不够用的话就每次增长10个),用于保存十个元素。

4,由于底层是个数组,因此对于Vector来说也是用下标获取元素。 在Vector中的get(获取)方法,它调用另一个方法,另一个方法就是数组获取元素的方法。

5.Vector没有重写object的toString方法和equals方法,在 他还是打印和比较的是地址,如果想让他打印和比较的是内容的话,都要重写object的这两个方法 。

6.在多线程情况下是安全的,安全性保证了,就导致速度慢了。
 7.数组的length(长度)方法是返回数组的长度,长度在new的时候已经给定了(也就是开辟的空间,例如开辟10个空间,可我就用了3个,返回的也是10),集合中的size(尺寸)返回的是元素数(例如往里面写三个元素,就返回三个,这也就是长度可变的意思)

8.vector的程序:

public static void main(String[] args) {
  // TODO Auto-generated method stub
  
  //1  创建集合Vector类的对象,该对象封装10个小空间
  Vector vector = new Vector();
  
  boolean flag1 =vector.isEmpty();
  System.out.println("flag1="+flag1);
  //2 容器中保存数据
  vector.add("hello");
  vector.add(100);
  vector.add(123.23);

  int size = vector.size();/**集合的长度是10(默认的),size表示的是元素的个数,因为这里输出的是3

                                      数组中规定length方法返回的数组的长度,而不是数组中元素的个数。**/
  vector.add("hello");vector.add("hello");vector.add("hello");vector.add("hello");

vector.add("hello");vector.add("hello");vector.add("hello");vector.add("hello");
  int size2= vector.size();
  System.out.println("size2="+size2);//这里输出的是12,因为默认长度是10不够用了,又自动增长了10
  
  //3 获取容器中的数据
  for(int x=0;x<vector.size();x++)
  {
   //获取集合中的元素
   Object obj = vector.get(x);
   System.out.println(obj);
  }
  
  //判断集合中有没有指定的元素
  boolean flag = vector.contains("hello wugui");
  System.out.println("flag="+flag);
  //vector.equals(o)  比较集合中对应位置上的元素是否相等
  
  //返回指定元素在集合第一次出现的位置
  int index=vector.indexOf("hello");
  System.out.println("index="+index);
  //删除指定的元素
  vector.remove(3);
  
  for(int x=0;x<vector.size();x++)
  {
   //获取集合中的元素
   Object obj = vector.get(x);
   System.out.println(obj);
  }
  
  //将vector转化为数组
  Object [] arr=vector.toArray();
  
  System.out.println(vector);
 }

 

 

(二):ArrayList实现类

ArrayList:(此类大致上与Vector一样):

1.不一样的地方是此类是线程不同步的,不安全(一个一个来)。

2,ArrayList没有重写object的toString方法和equals方法,在contains和remove方法中(这两个方法都需要比较两个元素内容) 他还是打印和比较的是地址,如果想让他打印和比较的是内容的话,都要重写object的这两个方法。

3.程序:

public class Student
{
 
 private String sno;
 private String name;
 private int age;
 public String getSno() {
  return sno;
 }
 public void setSno(String sno) {
  this.sno = sno;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public Student(String sno, String name, int age) {
  super();
  this.sno = sno;
  this.name = name;
  this.age = age;
 }
 public Student() {
  super();
  // TODO Auto-generated constructor stub
 }
 @Override
 public String toString() {
  return "Student [sno=" + sno + ", name=" + name + ", age=" + age + "]";
 }
 
 public boolean equals(Object obj)
 {
  
  if(this==obj)
   return true;
  if(!(obj instanceof Student))
   return false;
  Student stu = (Student)obj;
  
  if(this.sno.equals(stu.sno)&&
    this.name.equals(stu.name)&&
    this.age==stu.age)
  {
   return true;
  }
  
  return false;
  
 }
}

 

 

public static void main(String[] args) {
  
  Student stu1 = new Student("111","小强",26);
  Student stu2 = new Student("112","旺财",24);
  Student stu3 = new Student("113","小白",20);
  Student stu4 = new Student("114","小习",24);
  
  //1 创建集合对象
  ArrayList stuList = new ArrayList();
  //2 保存
  stuList.add(stu1);
  stuList.add(stu2);
  stuList.add(stu3);
  stuList.add(stu4);
  
  //3 遍历输出
  for(int x=0;x<stuList.size();x++)
  {
   
   Object obj = stuList.get(x);
   System.out.println(obj);
  }
  Student stu5 = new Student("114","小习",24);
  boolean flag = stuList.contains(stu5);//注意重写equals方法
  System.out.println("flag="+flag);
  
  Student stu6 = new Student("113","小白",20);
  stuList.remove(stu6);
  
  //3 遍历输出
  for(int x=0;x<stuList.size();x++)
  {
   
   Object obj = stuList.get(x);
   System.out.println(obj);
  }
  
  System.out.println(stuList.toString());
 }
}

 

(三)LinkedList实现类:(他的底层不是数组了,而是链表(单项链表))

1.链表里面的每个小内存空间不一定是连续的(上面两个实现类的每个空间都是连续的)。链表中每个元素都包含两个内容(一个是该空间的内容, 另一个是下一个空间的地址,这就保证了空间不用连续)。2.LinkedList的方法比较多,也就是说他继承了List以外,自己特有的方法比较多。也就是针对开头(first)和结尾(last)的。
3.栈结构:先进后出,体现的就是LinkerList的开头和结尾的应用(这里也体现出他特有的方法)。多出来的方法是addFirst,addLast,getFirst,getLast,removfFirst,removeLast这六个

 

第五:总结:

1.vector:这个内部类里面有一个属性是“obejct类型的数组”,有一个属性是“元素的个数",还有一个是“增长量”。这跟StringBuffer很相似
2.vector是当容量不够用的时候就增加10,每次不够用都增加10个空间,vector可以保存任意类型的元素,因为返回值是object类型的数据
3.集合的放进去拿出来是最常用的操作,放进去就是add方法,拿出来就是对集合的遍历,用到size方法和get方法
4.vector类的contains(包含)这个方法首先调用了vector类的indexof方法(在集合中找指定元素对应的索引),而vector中的indexof方法又调用了vector的equals方法,而vector的equals没有重写object的equals,因此比较的是地址,为了让他比较内容,集合对象重写object类的equals方法
5.remove删除的方法,在删除的时候要先找到才能删除,因此也用到了equals方法

6.set也是Collection的子接口:不能出现重复元素的集合,最多包含一个null(因为两个null就重复了)。也就是说不能包含obj.equals(obj2)==true

 

 

分享到:
评论

相关推荐

    Java集合框架Collection接口.pdf

    在Java中,Collection接口是一个顶层接口,它有两个主要的子接口:List和Set。其中,List是一个有序的集合,可以包含重复的元素;而Set是一个不重复的集合,元素是无序的。 Collection接口的常用方法 1、add(Object ...

    List和Set集合基础详解

    集合的家族(1)List集合—(有序,可重复)(2)Set集合—(无序,唯一) 一. 为什么要有集合? 集合是为了弥补数组的不足而存在。 集合相对于数组优势在于:a.集合的长度可以动态改变;b.集合中能够存放多种类型的数据。 ...

    40道java集合面试题含答案(很全很详细)

    Collection容器存储一个元素集合,包括List、Set和Queue等类型。Map容器存储键/值对映射。 Collection接口是List、Set和Queue接口的父接口,定义了存取一组对象的方法。Collection接口继承自Iterable接口,这意味着...

    Java集合框架.pdf

    Java集合框架概述 Java集合框架是一个抽象数据...Collection接口有两个重要的子接口:List和Set。 2、List接口 List接口是有序集合,可以存储重复元素。它定义了有序的列表,可以根据索引位置访问列表中的元素。List

    求2个集合的交集

    对于给定的两个集合,使用哈希表可以在线性时间复杂度内得到他们的交集和并集,具体说明如下: 假设有集合A={1, 7, 5, 13, 9, 10, 11}, B={5, 7, 10, 1, 18, 12}, 1)求交集,需要得到结果:A∩B={1, 5, 7,10} 思路...

    java面试宝典

    18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可...

    List、Set、Map的特点及遍历方法

    List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...

    map,list,set,stack,queue,vector等区别和特点1

    更为精炼的总结:Collection 是对象集合, Collection 有两个子接口 List 和 SetList 可以通过下标 (1,2..) 来取得值,值

    Collectio集合概述和常用方法

    Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。

    Java集合类——前言

    emmmm大致可以看出,上面有三巨头,即Iterator、Collection、Map(虚线框是接口,实线框是类),Java的集合类主要就是由Collection和Map两个接口派生而出,而Iterator主要起的是遍历器的作用。 先说Collection ...

    基础深化和提高-java容器

    Collection表示一组对象,它的主要子接口包括List、Set和Queue。其中: List:以线性方式存储元素,允许重复元素,并且可以根据索引访问元素。 Set:不允许包含重复元素,通常用于存储不重复的对象集合。 Queue:...

    Java集合总结

    一、集合框架 集合:集合可以看做是一种容器,用来存储对象信息。所有集合类都位于java.util包下...Java集合类主要由两个根接口Collection(单值)和Map(双值)派生出来的。 Collection:List、Set、Queue。 所以,Java集合

    浅谈java集合类以及示例

    前者每个位置只能保存一个元素,后者可以保存两个元素。 分类 Collection又可分为List、Set、Queue List下常用的有ArrayList、LinkedList、Vector、Stack Set下常用的有HashSet、TreeSet Queue又有Deque、Stack、...

    大数据开发成长之路——Java基础(四)

    分为两块:Collection和Map,也称之为集合接口 集合类都存放在java.util包中 Collection Collection分别被List和Set继承 List List被AbstractList实现,然后分为3个子类,ArrayList,LinkedList和VectorList List是...

    JAVA面试题最全集

    要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法...

    java 面试题 总结

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...

    java经典面试题汇总

    答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:...

    JAVA笔试题集锦(1-30)基础部分

    答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:...

    超级有影响力霸气的Java面试题大全文档

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...

    Java容器

    从图上我们可以看到Collection接口下有三个儿子,分别是Set,List,Queue;下面我来逐个介绍。 Set Set集合看重的是独一无二,就是没有重复的值。 HashSet:基于哈希表实现,支持快速查找,但是不支持有序,就是插入...

Global site tag (gtag.js) - Google Analytics