集合:Java API所提供的一系列类的实例,可以用于动态存放多个对象。
特点:长度不固定,只能存储引用类型的对象(即数组、类、接口、枚举)
今天主要总结一下Collection集合
数组和集合的区别:
A:长度区别
数组长度固定
集合长度可变
B:内容区别
数组可以是基本类型,也可以是引用类型
集合只能是引用类型
C:元素内容
数组只能存储同一种类型
集合可以存储不同类型(其实集合一般存储的也是同一种类型)
1)Collection接口中定义了一些集合常用的方法:
2)Collection集合常用的两个子接口:List和Set
List集合及其实现类:
List接口存储一组不唯一(对象可重复),有序(按照添加次序放置元素,不会重新排序)的对象。
List集合中的元素都对应一个整数型的序号记载其在集合中的位置,可以根据序号存取集合中的元素。
JDK API所提供的List集合的实现类常用的有:ArrayList,LinkedList
List接口在Collection集合接口方法的基础上又新增了一些实用的方法:
public Object get(int index):返回列表中的元素数
public Object add(int index,Object Element):在列表的指定位置插入指定元素,将当前处于该位置的元素(如果有的话)和所有后续元素向右移动。
public Object set(int index,Object Element):用指定元素替换列表中指定位置的元素
public Object remove(int index):移除列表中指定位置的元素
public ListIterator listIterator():返回此列表元素的列表迭代器。
ArrayList(线程不安全)是使用数组结构实现的List集合。
优点:对于使用索引取出元素有较高的效率(它使用索引快速定位对象)
缺点:元素做删除或插入速度较慢(因为使用了数组,需要移动后面的元素以调整索引顺序)
LinkedList(线程安全)是使用双向链表实现的集合
优点:对于频繁地插入或删除元素有较高的效率
缺点:查询元素时,效率低,因为要从第一个元素开始查找。
那么通过ArrayList和LinkedList各自的优缺点我们很容易就可以看出他们分别在何时使用吧。
List集合及其实现类
1.Set接口存储一组唯一(对象不可重复)的对象。
JDK API中所提供的Set集合常用的方法有:HashSet、TreeSet
HashSet的存储原理:根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置中。(注意:如果对应的位置没有其他元素,就只需要直接存入。否则会将新对象跟该位置的所有对象进行比较(调用equals()方法)以查看是否已经存在该对象,如果不存在就存放,否则就不存储)
注意:
1)HashSet不保存元素的加入顺序
2)HashSet存、取、删对象都有很高的效率
3)对于要存放到HashSet集合中的对象,对应的类可以重写hashCode(Object obj)方法和equals()方法以实现对象相等的规则
2.TreeSet:可以对加入其中的元素进行排序,但前提是必须指定排序规则
注意:如果使用TreeSet的无参构造实例化TreeSet集合,则加入到TreeSet集合中的元素所对应的类必须实现java.lang.Comparable<T>接口,复写其中的int compareTo(T o)方法,并在方法中编写排序规则