Java,集合框架,关于Collection接口
数组储存多个数据方面的特点:
·数组一旦初始化,其长度就是确定的。
·数组中的多个元素是依次紧密排列的,有序的,可重复的。
·数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。
数组储存多个数据方面的弊端:
·数组一旦初始化,其长度就是确定的。
·数组中储存数据特点的单一性。对于无序的不可重复的场景就不适用了。
·数组中可用的方法、属性都极少。具体的需求,要自己编写相关代码。
·元素的类型既可以是基本数据类型,也可以是引用数据类型。
·针对于数组中元素的删除,插入操作,性能比较差。
Java集合框架体系:(Java.util包下)
两个接口:
java.util.Collection:存储一个一个的数据。
——子接口:
①List:存储有序的,可重复的数据。(“动态”数组,即变长数组)
·实现类:ArrayList(主要的实现类)、LinkedList、Vector
②Set:存储无序的,不可重复的数据。(类似于集合)
·实现类:HashSet(主要实现类)、LinkedHashSet、TreeSet
java.util.Map:存储一对一对的数据。(key-value键值对,类似于数学的函数)
实现类:HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties
Collection接口中的方法测试:
与添加相关:
(1) add(Object obj):添加元素对象到当前集合中。
(2)addAll(Collection other):添加other集合中的所有元素对象到当前集合中。
与判断相关:
(3)int size( ):获取当前集合中实际存储的元素个数。
(4)boolean isEmpty( ):判断当前集合是否为空集合。(其实是判断size的大小是否为零)
(5)boolean contains(Object obj):判断当前集合中是否存在一个与obj对象equals返回true的元素。(如果包含自定义类,建议重写equals方法)
(6) boolean containsAll(Collection coll):判断coll集合中的元素是否在当前集合中都存在。即coll集合是否是当前集合的“子集”。
(7)boolean equals(Object obj):判断当前集合与obj是否相等。
与删除相关:
(8)void clear( ):清空集合元素
(9) boolean remove(object obj):从当前集合中删除第一个找到的与obj对象equals返回true的元素。
(10)boolean removeAl(Collection coll):从当前集合中删除所有与coll集合中相同的元素。
(11) boolean retainAll(Collection coll):从当前集合中删除两个集合中不同的元素,使得当前集合仅保留与col(集合中的元素相同的元素,即当前集合中仅保留两个集合的交集。
其他:
(12) Object[ ] toArray( ):返回包含当前集合中所有元素的数组。
(13)hashCode( ):获取集合对象的哈希值。
(14)iterator( ):返回迭代器对象,用于集合遍历。
集合与数组的相互转换:
集合转换为数组:调用方法toArray( )。
数组转化为集合:调用Arrays的静态方法asList(Object ... objs)。
向Collection中添加元素的要求:
要求元素所属的类一定要重写equals( )。因为Collection中的相关方法在使用时,要调用元素所在类的equals( )。
迭代器(Iterator)的作用:用来遍历集合元素。
获取迭代器的方式:
Tterator ii = 集合对象.iterator;
迭代的方式:
用iterator.hasNext( )方法作为循环的判断条件,再循环遍历集合元素。
Person pp = new Person(19,"Lily");
Collection cc = new ArrayList();
cc.add("aaa");
cc.add(111223);//自动装箱为Integer类型再作为参数
cc.add(pp);
Iterator iterator = cc.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
next的作用:①将指针指向的集合元素向下移②将下移后指针位置上的元素返回。
增强for循环(即foreach循环)的使用:
作用:用来遍历数组、集合。
格式:
for(要遍历的集合或数组的元素的类型 临时变量 : 要遍历的集合或数组变量)
{
//操作临时变量
}
说明:
针对于集合来讲,增强for循环的底层使用的是迭代器。
增强for循环的执行过程中,是将集合或数组中的元素依次赋值给临时变量。
List接口中常用方法的测试:
List接口中存储数据的特点:
用于存储有序的、可以重复的数据。(有时使用List来替代数组,变长数组)
List中的常用方法:
第一批:Collection中声明的方法
第二批:因为List是有序的,所以有一些针对索引操作的方法。
插入元素
void add(int index,Object ele):在index位置插入ele元素
boolean addAll(int index,Collection eles):从index位置开始将eles中的所有元素添加进来
获取元素
Object get(int index):获取指定index位置的元素
List subList(int fromIndex, int toIndex):返回从fromIndex到toIndex位置的子集合
获取元素索引
int indexOf(Object obj):返回obj在集合中首次出现的位置
int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
删除和替换元素
Object remove(int index):移除指定index位置的元素,并返回此元素。
(假设要删除索引为2的元素,参数输入2即可。但是要删除值为2的元素,就要将2包装为Intrger类型(因为参数要Object,参数输入2时,会优先将2识别为int 类型的index。)后再传入参数。
Object set(int index, Object ele):设置指定index位置的元素为ele。
List接口的实现类特点:
·ArrayList:List接口的主要实现类。线程不安全的,效率高。底层使用Object[ ]数组存储。在添加数据、查找数据时效率较高,在插入数据,删除数据时效率较低。
·LinkedList:底层使用双向链表的方式进行存储。在插入数据,删除数据时效率较高,在添加数据、查找数据时效率较低。(在对集合中的数据进行频繁地删除、插入的操作时,建议使用此类。)
·Vector:List接口的古老实现类。线程安全的,效率低。底层使用Object[ ]数组存储。