集合知识点总结

1.常用集合接口:
 
a、Collection接口:最基本的集合接口,存储不唯一,无序的对象,List接口和Set接口的父接口;
  Set set = new TreeSet<>(new Comparator();   List weights = new
ArrayList<>();//List是父类,作为一个接口,也是一个集合,<>是一个集合表示的方式。integer泛型
 b、List接口:一个有序、可以重复的集合,常用实现类ArrayList和LinkedList;
 c、Set接口:一个无序、不可重复的集合,常用实现类HashSet、LinkedHashSet、TreeSet;
Set hashSet = new HashSet(); 元素无序,不可重复,线程不安全,集合元素可以为 NULL
HashSet set = new HashSet<>()底层采用链表和哈希表的算法,保证元素有序,唯一性(即不可以重复,有序),线程不安全
TreeSet ts = new TreeSet<>(new Comparator() 底层使用红黑树算法,擅长于范围查询,元素有序,不可重复,线程不安全
d、Map接口:key-value的键值对,key不允许重复,value可以,key-value通过映射关系关联,常用实现类HashMap和TreeMap;
采用哈希表算法,key无序且不允许重复,key判断重复的标准是:key1和key2是否equals为true,并且hashCode相等
Map<String, String> hashMap = new HashMap<String, String>();
采用红黑树算法,key有序且不允许重复,key判断重复的标准是:compareTo或compare返回值是否为0
4 Map<String, String> treeMap = new TreeMap<String, String>();

  1. Set和List的区别:

a、Set实例存储是无序的,不重复的数据;List实例存储的是有序的,可以重复的元素;

b、Set检索效率低下,删除和插入效率高,删除和插入不会引起元素位置改变;

c、List可以根据存储的数据长度自动增长List长度,查找元素效率高,插入删除效率低,插入和删除时会引起其他元素位置改变;
  
3. Map和Set的关系:

a、HashMap、HashSet 都采哈希表算法,TreeMap、TreeSet 都采用红黑树算法、LinkedHashMap、LinkedHashSet 都采用哈希表算法和红黑树算法;

b、分析Set的底层源码,Set 集合就是由Map集合的Key组成;

案例:
Map<Integer, String> poker = new HashMap<>();
//2.创建花色集合和数字集合
List color = new ArrayList<>();
List num = new ArrayList<>();

    Collections.addAll(color,"红桃","黑桃","梅花","方块");
    Collections.addAll(num,"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");

    int count = 1;
    poker.put(count++,"大王");//返回1
    poker.put(count++,"小王");//返回2

    for(String c:num){
        for (String n :color){
            String card = c + n ;
            poker.put(count++,card);
        }
    }//以大小存
    //得到SET,取出poker集合键
    Set<Integer> set = poker.keySet();
    List<Integer> list = new ArrayList<>();
    list.addAll(set);

    Collections.shuffle(list);//打乱
    List<Integer> dipai = new ArrayList<>();
    List<Integer> p1 = new ArrayList<>();
    List<Integer> p2 = new ArrayList<>();
    List<Integer> p3 = new ArrayList<>();


    for(int i = 0;i<list.size();i++){
        if(i>=51){
            dipai.add(list.get(i));
        }else if(i % 3 ==0){
            p1.add(list.get(i));
        }else if(i % 3 ==1) {
            p2.add(list.get(i));
        }else if(i % 3 ==2) {
            p3.add(list.get(i));
        }
    }
    Collections.sort(p1);
    Collections.sort(p2);
    Collections.sort(p3);

    ArrayList<String> play1 = new ArrayList<>();
    ArrayList<String> play2 = new ArrayList<>();
    ArrayList<String> play3 = new ArrayList<>();
    ArrayList<String> dipai1 = new ArrayList<>();

    for(Integer integer: dipai){
        dipai1.add(poker.get(integer));
    }//值大小变成牌的值
    for(Integer integer: p1){
        play1.add(poker.get(integer));
    }
    for(Integer integer: p2){
        play2.add(poker.get(integer));
    }
    for(Integer integer: p3){
        play3.add(poker.get(integer));
    }
    System.out.println(play1);
    System.out.println(play2);
    System.out.println(play3);
    System.out.println(dipai1);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值