re0:从零开始的Java学习生活16(连载)

集合

一、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> -->推荐使用 性能更好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值