Java集合类、List集合与Set集合 |
您所在的位置:网站首页 › linkedhashset排序 › Java集合类、List集合与Set集合 |
一、Java集合类
1.概念 我们都知道Java数组的长度是固定的,在同一个数组中只能存放相同类型的数据。数组既可以存放基本数据类型,也可以存放引用数据类型。但是数组最大的缺陷是长度固定,数组一旦被创建,长度就不能改变。 Java集合引入的目的是:为了使程序能方便地存储和操纵数目不固定的一组数据,JDK类库提供了Java集合。2.特点 所有的Java集合类都位于java.util包中。和数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。对于基本数据类型,Java会自动装箱为其对应的包装类。3.分类 (1)Set(集):集合中的对象不按特定方式排列,并且没有重复的对象。它的有些实现类可以对集合中的对象按特定方式排序。 (2)Link(链表):集合中的对象按照索引位置排序,可以有重复的元素。索引从0开始。 (3)Queue(队列):集合中的元素按照先进先出的规则来排列,在队头删除元素,队尾插入元素。允许有重复的元素。 (4)Map(映射):集合中的每个元素包括一对键(Key)对象和值(Value)对象。集合中没有重复的键对象,允许有重复的值对象。 其中,Set、Link、Queue都是Connection接口的子接口;Map接口没有继承Connection接口。4.Collection和Iterator接口 4.1 Collection接口 下面是一些Collection接口的通用方法。 (1)boolean add(Object o) 向集合中加入一个对象的引用。 (2)void clear() 删除集合中的所有元素,即不再持有对这些对象的引用。 (3)boolean contains(Object o) 判断在集合中是否持有对该对象的引用。 (4)Iterator iterator() 返回一个Iterator对象,可以用它来遍历集合中的元素。 (5)boolean isEmpty() 判断集合是否为空 (6)boolean remove(Object o) 从集合中删除对一个对象的引用。 (7)int size() 返回集合中元素的数目 (8)Object[] toArray() 返回一个对象数组,该数组包含集合中的所有对象。 4.2 Iterator接口 下面是一些Iterator接口的通用方法。 (1)hasNext():判断集合中是否遍历完毕,如果没有,就返回true. (2)next():返回下一个元素。 (3)remove():从集合中删除由next()返回的当前元素。5.集合的输出 集合共有三种输出方式,分别是foreach、Iterator(迭代器)和LinkIterator(双向迭代器)。Iterator方式只能从前向后打印,而LinkIterator方式可以双向打印,但要注意,从后往前打印时一定要先从前向后打印。 public static void main(String[] args) { Collection list = new ArrayList(); list.add("hello"); list.add("hello"); list.add("bit"); //方式一 迭代器 Iterator iterator1 = list.iterator(); while (iterator1.hasNext()) { System.out.print(iterator1.next()+" ");//hello hello bit } //方式二 双向迭代器 ListIterator 可以由后向前输出。要进行由后向前输出时,一定要先进行从前向后输出,否则无法实现双向。 ListIterator listIterator = ((ArrayList) list).listIterator(); System.out.println("由前向后输出为:"); while(listIterator.hasNext()){ System.out.print(listIterator.next()+" "); } System.out.println("\n由后向前输出为:"); while (listIterator.hasPrevious()) { System.out.print(listIterator.previous()+" "); } //结果:由前向后输出为: //hello hello bit //由后向前输出为: //bit hello hello System.out.println(); //方式三 foreach for(String mylist:list){ System.out.print(mylist+" ");//hello hello bit } }二、List集合接口 1.List接口较Collection接口扩充的方法是: public E get(int index) 根据索引取得数据。 public E set(int index,E element) 修改数据。2.特点 元素以线式方式存储,允许有重复数据。3.子接口 3.1 ArrayList接口 ArrayList代表长度可变的数组,允许对元素的随机访问,但是向ArrayList中插入和删除数据的速度较慢。ArrayList类还实现了RandomAccess接口,该接口没有任何方法,仅仅是个标识类型的接口。凡是实现RandomAccess接口的类意味着具有良好的快速随机访问性能。 3.2 LinkedList接口 实现采用链表数据结构。向LinkedList插入和删除数据的元素较快,但是随机访问的速度较慢。LinkedList单独具有addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()等方法,这些方法使得LinkedList可以作为堆栈、队列和双向队列使用。 3.3 Vector接口(旧的子类) 使用较少,用法和ArrayList类似。Enumeration输出接口只支持Vector接口,而不支持Collection、Set、List等接口。 Enumeration接口的方法有: public boolean hasMoreElements(); 判断是否有下一个元素 public E nextElements(); 取得元素 public Enumeration elements() 取得Enumeration对象 代码实现: public static void main(String[] args) { Vector vector=new Vector(); vector.add("hello"); vector.add("xiaomi"); vector.add("xiaohong"); Enumeration enumeration=vector.elements(); while(enumeration.hasMoreElements()){ System.out.print(enumeration.nextElement()+" "); } }结果:hello xiaomi xiaohong 3.4 ArrayList、Vector和LinkedList接口的区别? 它们三个都是Link接口的子类。 先比较ArrayList和Vector (1)使用时间不同:ArrayList是从JDK1.2提供的,而Vector是从JDK1.0就提供了。 (2)处理形式不同:ArrayList是异步处理,线程不安全;Vector是同步处理,线程安全。 (3)数据安全:ArrayList线程不安全;Vector线程安全。 (4)输出形式:ArrayList支持Iterator、ListIterator、foreach;而Vector支持Iterator、ListIterator、foreach、Enumeration。 再比较ArrayList和LinkedList (1)对数据的操作:ArrayList随机访问的速度块,但是插入和删除的速度慢。 而LinkedList插入和删除数据的速度快,但是随机访问的速度慢。 (2)封装的内容不同:ArrayList封装的是数组,而LinkedList封装的是链表。 (3)时间复杂度:ArrayList的时间复杂度是1,而LinkedList的复杂度是n。 4.打印方式 因为Link类中有get()方法,可以直接得到元素。 //List类型的打印 public static void code1(){ List list=new ArrayList(); list.add("hello"); list.add("hello"); list.add("hello"); //List类型时有四种输出形式 //方式一 Collection接口不再适用,因为get()是List子接口提供的。 for(int i=0;i0){ return -1; } if(o1.getName().compareTo(o2.getName()) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |