集合
一、TreeSet
无序 不可重复
底层结构: 红黑树(平衡二叉树)
特点: 自动做生序排序
新增功能: 新增了一些能够比较的相关功能
二、比较器
内部比较器|自然排序 : 定义在一个类型的内部的比较方式
java.lang.Comparable 接口
类型实现Comparable接口,重写compareTo(T o)方法,方法内部指定比较规则
compareTo 返回值 int 类型 T1.compareTo(T2) -> 0: 相等 整数:T1>T2 负数:T1<T2
优点: 默认比较方式,定义在类的内部
缺点: 固定,硬编码,不够灵活
@Override public int compareTo(User o) { return this.userName.compareTo(o.getUserName()); }
外部比较器|定制排序 : 定义在一个类型(要比较的对象数据的类型)的外部的比较方式
实现 java.util.Comparator<T>接口,重写compare(T t1, T t2)定义比较规则
返回值: 0: 相等 正数:T1>T2 负数:T1<T2
注意: 如果使用的时候指定了定值排序使用定值排序,没有指定使用自然排序
class X implements Comparator<User>{ @Override public int compare(User o1, User o2) { return o2.getUserName().compareTo(o1.getUserName()); } }
Comparator<User> com=(x,y)->x.getUserName().compareTo(y.getUserName()); Arrays.sort(arr,com); System.out.println(Arrays.toString(arr)); //另一种写法 Arrays.sort(arr,(x,y)->x.getUserName().compareTo(y.getUserName());
三、Map
Map<K,V>
集合中的元素由键值对k-v组成
k: 可以为任意引用数据类型数据 --> Set 无序不可重复
v: 可以为任意引用数据类型数据 --> Collection 可重复无序
一个key只能对应一个value->映射关系
可以根据key操作value
PS:Map的无序与去重 由key决定
1、Map的遍历方式
//举个栗子: Map<Integer,String> map=new HashMap<>(); m.put(1,"关羽"); m.put(2,"张飞"); m.put(3,"赵云"); m.put(4,"马超"); m.put(5,"黄忠");
1、keySet
Set<Integer> keys=map.keySet; //for..each for(Integer i:keys){ System.out.println(i+"-->"+map.get(i)); } //迭代器 Iterator<Integer> it1= keys.iterator(); while(it1.hasNext()){ Integer i= it1.next(); System.out.println(i+"-->"+map.get(i)); }
2、values
Collection col=map.values; //for..each for(String s:col){ System.out.println(s); } //迭代器 Iterator<String> it2=col.iterator(); while(it2.hasNext()){ System.ot.println(it2.next()); }
3、entrySet
Set<Map.EntrySet<Integer,String>> set=map.entrySet(); //for..each for(Map.Entry<Integer,String> e:set){ System.out.println(e.getKey()+"-->"+e.getValue()); } //迭代器 Iterator<Map.Entry<Integer,String>> it3=set.iterator(); while(it3.hasNext()){ System.out.println(it3.next()); }
2、HashMap
底层结构:哈希表(数组+链表+红黑树)
特点:查询,增删效率较高
扩容问题:
DEFAULT_INITIAL_CAPACITY 默认初始容量:16
DEFAULT_LOAD_FACTOR 默认加载因子:0.75
threshold 扩容临界值:DEFAULT_LOAD_FACTOR * DEFAULT_INITIAL_CAPACITY(即存储数据量达到初始容量与加载因子的乘积)
新增内容:无新增方法
遍历方式:同Map
3、TreeMap
TreeSet底层是由TreeMap维护的
底层: 红黑树
特点: 自动做升序排序(根据key做升序)
新增内容: 新增了一些有关于比较的方法
4、properties
特殊的Map,key和value只能存储字符串
load方法可以读取配置文件
优点:可以通过properties实现软编码,从配置文件中读取数据,便于后期维护
使用步骤:
1.定义一个配置文件 xx.properties (键值对都是字符串)
2.创建Properties类型的对象,调用load从流中加载(输入流的数据源就是配置文件)
3.从配置文件中读取数据,加载使用
Properties pro = new Properties(); pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("e.properties")); System.out.println(pro);
username=zhangSan password=123456 age=18 subject=java
四、Collections
Collection和Collections的区别:
Collection是集合体系的上层接口
Collections是工具类,静态工厂
方法名 | 作用 |
---|---|
sort | 升序排序 |
reverse | 反转 |
shuffle | 随机排序 |
fill | 以某个数据重写整个集合 |
binarySeach | 二分法查询(需要实现升序排序) |
HashMap线程不安全的问题:
1.使用Hashtable-->线程安全的哈希表
2.使用Collections-->synchronizedMap(Map<K,V> 方法返回一个线程安全的Map
3.juc包下ConcurrentHashMap<K,V> -->推荐使用 性能更好