集合框架
1.集合
集合可以存放多种多个数据! 为什么不使用数组?
数组的长度不可变,无法存放预期的值【新闻条数】定义长了浪费资源,定义短了不够使用
集合的内容
collection
list set map
ArrayList Vector LinkedList HashSet TreeSet HashMap TreeMap
各个集合接口的值是如何存放的
1.list 存放了一组有序且不唯一的对象。
2.set 存放了一组无序且唯一的对象
3.map 存放了一组键值对的对象
List
1.ArrayList实现类
特点:ArrayList实现了长度可变的数组,在内存中分配了一段连续的空间,遍历和随机访问元素的效率比较高 线程不安全
方法:add(Object o) 添加元素
add(intindex, Object o) 根据指定的下表添加元素
size() 获取集合的元素个数
get(int index) 返回指定索引的元素,返回的类型为Object类型
contains(Objecto) 判断集合中是否存在指定的元素 存在返回true 不存在返回false
remove(int index) 根据下表删除 并返回删除的对象 删除的下标不存在报错
remove(Objecto) 根据指定的元素删除 并返回删除的结果【true/false】 删除的元素不存在不报错
如果下标和存入的值是相同的,默认以下标来删除
clear() 清空集合中所有的元素
空间扩充
默然为10个 空间不够 每次扩充1.5倍
ArrayList al=new ArrayList(20); //扩充0次
ArrayList al=new ArrayList(); //扩充一次
al.add(1);al.add(2);
al.add(3);al.add(4);
al.add(5);al.add(6);
al.add(7);al.add(8);
al.add(9);al.add(10);
al.add(11);//此时有16个空间
2.Vector
和我们的ArrayList一样
特点: 线程安全 效率低
方法:add(Object o) 添加元素
add(int index, Object o) 根据指定的下表添加元素
size() 获取集合的元素个数
get(intindex) 返回指定索引的元素,返回的类型为Object类型
contains(Object o) 判断集合中是否存在指定的元素 存在返回true 不存在返回false
remove(intindex) 根据下表删除 并返回删除的对象 删除的下标不存在报错
remove(Object o) 根据指定的元素删除 并返回删除的结果【true/false】 删除的元素不存在不报错
如果下标和存入的值是相同的,默认以下标来删除
clear() 清空集合中所有的元素
3.LinkeListTest
特点:采用双向链表的存储方式,插入/删除元素的效率比较高
方法:addFirst(Object o) 在集合的首部添加元素
addLast(Object o) 在集合的尾部添加元素
getFirst() 返回集合中第一个元素
getLast() 返回集合中最后一个元素
removeFirst() 删除并返回第一个元素
removeLast() 删除并返回最后一个元素
Set
1.HashSet实现类
特点:存放了一组无须且唯一的对象,取出时无法保证其顺序
注意:HashSet判断唯一的对象,其实是调用Object类的equals方法判断的
问题:两个对象,指向同一个人,我们只想存储一个对象就可以了
解决办法:重写该存储对象的hashcode和equals方法
内部执行判断流程:先调用对象的hashcode方法来求值;
如果hashcode值没有存在过【没有重复】,表示该对象可以添加
如果hashcode值相同,(还不能确定对象是否相同,因为不同的对象可能产生相同的hashcode值)
还需要调用equals方法来进行下一步验证
equals方法 返回true表示两个对象相同,返回false表示不相同
方法:add(Object o) 添加元素
contains(Object 0) 判断集合中是否存在指定元素
isEmpty() 判断集合中是否存在元素 存在返回false
size() 获取集合的元素个数
remove(Object 0); 删除指定的元素
2.TreeSet
特点:存放了一组无须且唯一的对象,存取时可以指定顺序规则/存储对象时一定要指定排序规则
注意:在treeset集合中添加自定义对象,必须实现 implements Comparable<添加对象的类型>
因为添加方法会使用compareTo方法来验证对象的排列位置。并验证对象是否重复
【如果返回0表示两个对象重复 一般都以唯一的属性进行排序】
方法:first(); 返回集合中排序的第一个元素
last() 返回集合中排序的最后一个元素
Map
1. HashMap实现类
特点:一组键值对的存储方式【color:red】 一个键值对不能包含重复的键【color:red color:yellow】
每个键只能对应一个值;不能保证映射的顺序。 线程不安全,效率高
方法:put(Object o,Object o) 一键值对的方式添加元素
get(Object key) 根据键返回关联的值【Object类型】 如果不存在指定的键 返回null
remove(Object key) 根据指定的键删除 对应的键值对
size() 返回元素个数
keySet() 返回键的集合【set集合】
values() 返回值得集合 【collention集合】
containsValue(Object o) 判断集合中是否存在某个值
containsKey(Object o) 判断集合中是否存在某个键
clear(); 清空集合
注意:键不能重复 重复了将会被下一个所 覆盖
2.Hashtable实现类
特点:与Hashmap相似 但是线程安全 效率低
方法:与Hashmap 一样
3.TreeMap 实现类
特点:底层是二叉数据结构 线程不安全 可用于给map集合中的键进行排序
思路与TreeSet一致
迭代器
Iterator
方法: hasNext() 判断是否存在一个可访问的元素
next() 返回指针指向的下一个元素
迭代器循环取数据
Iterator it=hs.iterator();
while(it.hasNext()){
//取出下一个元素
Student stu=(Student) it.next();
System.out.println(stu.getId()+"\t"+stu.getName());
}
Collentions 工具类
升序 Collections.sort(arr);
查找某个集合中是否存在某个元素 存在的话找到并返回其下标 没找到返回负数
System.out.println(Collections.binarySearch(arr,"c"));
查找最大/最小值
System.out.println(Collections.max(arr));
System.out.println(Collections.min(arr));