相信每个人从小到大都听过集合这个词语!只要是都上过学的小可爱都会听到“集合”这个可怕又熟悉的口号。从小学到高中,基本每天早上都会听到一个口号“集合”当你听到这可怕的口号时候证明你一天的时光正式开始了!
不管是生活中还是在学习中、工作中基本都能听到“集合”这个小朋友。
其实在计算机世界中也会有集合这个概念,而且这个概念还挺流行的。java中的集合分为四类:
第一个是List列表,第二个是Queue队列,第三个是Set集合,第四个是Map映射。
今天所要介绍的List。
List接口存储的数据必须有序的,不唯一(可重复)。啥叫有序和无序呢?唯一与不唯一又有啥区别呢?
所谓的有序就是List下标是有序的,感觉说和没说没啥区别!但注意“下标这个词语”,我们大家都做过早操和排过队,有第一排,第二排,第一列,第二列这种类似的区分。而List下标类似于这样子,第一个是0,第二个是1,以此来递增上去,这就是有序的。
那唯一和不唯一呢?这个更好理解了。唯一性就是独一无二的存在,不唯一意指:意义上是一样的存在,可能出现两个相同的东西。这就是唯一性与不唯一性。
List接口表示有序的集合,序列,提供了索引index,可以通过index对集合进行增删改查。
那集合如何实现呢?相当于如果你把一大群学生如何让他们听从你的安排呢?如果是你是小学生班主任的话,你的鞭子相当于一个ArrayList实现类,你用这个鞭子实现学生排成一排!
List list=new ArrayList();
list.add("小明");
list.add("大明");
list.add("老杨");
System.out.println(list.toString());
结果:[小明, 大明, 老杨]。
ArrayList是List接口的实现类,底层数据结构是数组的可变有序列表。
ArrayList是一个包装类,内部封装了一个数组Object[ ] elementData,默认容量是10个空间,当使用add()方法时,它第一件事是确认容量够不够,如不够,则按照 newCapacity =oldCapacity + oldCapacity/2的规则拓容。
如果你想自己手动拓容的时候,可适当使用ensureCapacity(minCapacity)和trimToSize来提供拓容性能和节省拓容空年间。
ArrayList 是线程不安全的可变数组版本。在多线程环境下使用要注意。
我们可通过Collections.synchronizedList(newArrayList(…));操作得到一个线程安全的ArrayList。
ArrayList中的迭代器在List集合结果变化后,我们调用迭代器中的方法时会快速抛出ConcurrentModificationException异常通知程序,以免造成损失。
List list=new Vector();
Vector()也是List的实现类,底层数结构也是数组的可变有序列表,但它是线程安全的。因为大部分方法都加了“synchronized”关键字以保证线程环境下的线程安全问题。但有时候我们还是选择ArrayList这个实现类多一点,因为ArrayList效率要比Vector高。
LinkedList是List接口的实现类,底层数据结构是链表。LinkedList线程不安全,它和ArrayList一样,但它的查询效率低。
何为链表?你可以想象成为双头蛇,它类似于双头蛇!
结语:List属于集合,和它一样是集合的还有三个。Set,Map,Queue。
List有几个实现类:
ArrayList实现类,底层数据结构使数组结构,查询速度快,增删改慢。
LinkList实现类,底层使用链表结构,增删快,查询慢。
Vector实现类:线程安全,线程同步。效率比ArrayList低。
举报/反馈