标签:
整个集合框架中最经常使用的就是List(列表)和Set(集)
一、List集合 && Set的特点
Collection的子接口:
1、List:有序(存入和取出的顺序一致),元素都有索引且能够反复
API文档解释:有序的 collection(也称为序列)。此接口的用户能够对列表中每一个元素的插入位置进行精确地控制。用户能够依据元素的整数索引(在列表中的位置)訪问元素,并搜索列表中的元素。
2、Set:元素不能反复,无序,有可能会有序
API文档解释:一个不包括反复元素的 collection。更确切地讲,set 不包括满足e1.equals(e2)
的元素对 e1
和 e2
,而且最多包括一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的set 抽象。
....
依据问题须要使用相应的容器
二、List常见方法
由于是Collection的子类,仅仅演示其特有方法
1.加入 void add(index,element) void add(index,Collection) 2.删除 Object remove(index) 3.改动 Object set(index,element) 4.获取 Object get(index) int indexOf(Object) int lastIndexOf(Object) List subList(from,to)//含头,不含尾
代码演示
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List list = new ArrayList();//注意LIst的包不要导入错误,java.awt中也有个List show(list); } public static void show(List list) { //加入 list.add("a1"); list.add("a2"); list.add("a3"); System.out.println("List = "+list); //加入元素 //list.add(2,"a250"); //删除元素 //list.remove(2); //改动(Collection不具备改动) //list.set(2, "a25"); //获取 //list.get(1); //System.out.println("list = "+list.get(1)); //获取子列表 List LL = list.subList(0, 2);//含头,不含尾 System.out.println("ZI List = "+LL); } }
由上可见,List的特有的常见方法有一个共性就是都能够操作角标->增删改查
三、ListIterator接口:List特有
API文档解释:系列表迭代器,同意程序猿按任一方向遍历列表、迭代期间改动列表,并获得迭代器在列表中的当前位置。
ListIterator迭代器,是为了处理迭代器迭代和集合操作出现并发改动时,出现的异常问题
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class Main { public static void main(String[] args) { List list = new ArrayList(); //show(list); ListIteratorDemo(list); } public static void ListIteratorDemo(List list) { list.add("a1"); list.add("a2"); list.add("a3"); //Iterator it = list.iterator();//此时的it仅仅知道当前状态的list的内部数据结构的存储方式 //所下面述代码会抛出异常,由于后来list结构变化了,it不知道 /*while(it.hasNext()) { Object object = it.next(); if (object.equals("a2")) { list.add("a250");//ConcurrentModificationException //此异常的原因是:当方法检測到对象的并发改动,但不同意这样的改动时,抛出此异常。 } else { System.out.println(object); } }*/ //解决:迭代和集合同一时候訪问造成了并发,所以集合操作的时候不迭代,迭代的时候不使用集合操作 System.out.println("Old List :"+list); ListIterator iterator = list.listIterator(); //list特有迭代器,能够实如今迭代过程中完毕对元素的增删改查 /*listIterator(int index) 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置開始。*/ while (iterator.hasNext()) { Object object = iterator.next(); if(object.equals("a2")){ iterator.add("a250");//注意此处就不用list,而是使用的迭代器,避免并发 } } System.out.println("New List:"+list); //System.out.println("hasNext? "+iterator.hasNext()); //System.out.println("hasPrevious? "+iterator.hasPrevious()); while(iterator.hasPrevious()) { System.out.println(iterator.previous()); } } }
1.Vector:内部是数组结构,且同步,增删慢,查询慢
API文档解释:Vector
类能够实现可增长的对象数组。与数组一样,它包括能够使用整数索引进行訪问的组件。可是,Vector
的大小能够依据须要增大或缩小,以适应创建Vector
后进行加入或移除项的操作。
2.ArrayList:内部是数组结构,不同步替代了Vector,查询速度快
API文档解释:List 接口的大小可变数组的实现。实现了全部可选列表操作,并同意包含null 在内的全部元素。除了实现List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于Vector 类,除了此类是不同步的。)
3.LinkedList:内部是链式存储结构,不同步,增删速度快
API文档解释:List 接口的链接列表实现。实现全部可选的列表操作,而且同意全部元素(包含null)。除了实现List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和insert 元素提供了统一的命名方法。这些操作同意将链接列表用作堆栈、队列或双端队列。
JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点
标签:
原文地址:http://www.cnblogs.com/mengfanrong/p/4320817.html