集合的概念
集合类存放的都是对象的引用,而非对象本身。
集合中不能存放基本数据类型,只能存放引用数据类型。
集合是一个动态的数组,数组的长度不可发生改变,集合的长度是可以改变的。
Collection的特点
Collection接口中的元素是可重复的但无序的;
Lis集合
元素是可重复的有序的,每一个元素都存在一个索引;
ArryList集合
对数组进行封装,是顺序结构;
特点
查询快,增删慢,线程不安全,效率高;
链式操作
list.get(0).name+list.get(0).age
往指定索引位置插入元素,不需要手动扩容位移插入了:
list.add(index,元素)
删除指定索引位置的元素:list.remove(index);
判断某个元素是否在集合中:list.contains(元素);
LinkedList集合
底层数据结构是链表;
特点
查询慢,增删快,线程不安全,效率高;
基于头尾的数据进行操作;
栈顶元素
删除栈顶元素:list.pop( );
取出栈顶元素:list.peek( );
Map集合
元素无序,通过键值对的方式进行存储,键不可重复,值可以重复;
键(key) 值(value)
Map是一个存储键值对的元素的集合;
HashMap集合
HashMap集合是可以序化的,是线程不安全的;
HashMap底层是基于数组、链表和红黑树实现的;
赋值与取值
hashMap.put( k , y ); //赋值
hashMap.get( k ); //取值
Set集合
元素是无序的,是通过链表进行存储的,元素不可重复;
HashSet集合
特点
线程不安全,效率高,允许存储null元素,元素无序且唯一;
TreeSet集合
TreeSet基于TreeMap实现的,底层的数据结构是红黑树;
迭代器 iterator
判断迭代器中是否有下一个元素:iterator.hasNext( );
取出当前元素:iterator.next( );
hashMap是无序存放的,所以无法直接通过索引遍历,且key值不可重复,正好和Set集合特点一样,所以就通过hashmap.keySet( )把key放到一个Set集合里面;
用迭代器对Set集合进行迭代,取出key放到迭代器里;
对迭代器进行循环,取出key对应的value值。
增强for循环:foreach
for( :){
}
冒号左边有两个内容一个是在集合中取出的值的对应类型的空间;另一个是取的一个名字;
冒号右边是你要遍历的集合;
注意:在使用增强for循环时要注意判空;