1.List体系的实现类具有相同的特点 --> 有序-可重复-有索引-根据索引操作的方法
ArrayList
底层实现结构: 数组结构实现
优点:通过索引遍历,随机获取效率高
缺点:增加,删除效率低(遇到数组的拷贝问题)
扩容: int newCapacity = oldCapacity + (oldCapacity >> 1);使用copyOf方法进行动态扩容,每次扩容原容量的1.5倍
默认容量为10-->add
Vector
与ArrayList底层实现和特点相同
不同:a.线程是安全的,ArrayList线程不安全 b.扩容是原容量的2倍
LinkedList
底层实现结构:双向链表实现
优点:插入数据,删除数据效率高
缺点:做查询效率低
如果大量的做删除可以使用LinkedList,大量做查询可以使用ArrayList
新增方法:一些操作于头尾的方法(推荐使用见名知意的方法)
注意:List集合存储对象类型数据 -->重写equals()方法,默认调用对象的equals()比较
2.Set 无序不可重复的 自动实现去重
HashSet:是由HashMap的key维护
底层实现:哈希表(数组+链表+红黑树)|HashTable实现
特点:查询,增加,修改效率高
缺点:无序,没有索引操作
扩容:默认初始量是 16,加载因子是 0.75,当数据个数达到初始容量*加载因子个数的时候就扩容,扩容原容量的2倍
存储基本数据类型|java提供的引用数据类型自动去重
存储 *对象* 类型数据:去重问题
重写hashcode()方法和equals()方法
如果hashcode相同,对象可能相同可能不同
如果hashcode值不同,对象肯定不相同
hash表结构存储的流程:
a.计算hashcode值决定桶的位置,如果hashcode值不相同不在一个桶值,根本不会调用equals比较两个对象内容是否相同了
3.TreeSet
底层:红黑树实现
特点:默认升序排序
存储的数据是自定义引用数据类型
1.去重
2.排序
解决方式
1.Comparable 定义内部比较器 默认
2.comparator 外部比较器
4.Map 都是存储 键值对形式的数据 K-V
k都是无序不可重复的 --->Set集合
v是无序,可重复的 --->Collection集合
一个key只能对应一个value,key与value之间具有映射关系
一个key对应多个值,可以把多个值存储在容器或者数组中
key和value都可以为任意数据类型,引用数据类型
相同的key,value会覆盖
5.容器类:ArrayList HashMap最重要
HashMap:线程不安全
底层由hash表实现
HashTable:线程安全的
hash表结构---根据key做去重,key是存储自定义的对象类型的数据,去重:重写hashCode和equals方法
TreeMap 红黑树的结构,内部数据根据key排序,默认升序
自定义规则排序,内部|外部比较器
6.Collections 操作容器的工具类
问题:HashMap是线程不安全的
1.使用线程安全的HashTable
2.使用Collections的synchronizedMap(Map<K,V>) m返回线程安全的map
3.java.util.concurrent(高级并发编程包)下 类 ConcurrentHashMap<K,V>实现线程安全的hashmap---效率高
7.Properties 存储字符串类型的键值对
硬编码:频繁修改源代码
使用配置文件概念,把经常修改的数据值,提取出来定义在配置文件中,修改只需要区配置文件中修改就可以