JavaSe基础2023年2月02日学习内容 泛型、Map集合、Collections使用

JavaSe-2023-2-02 泛型、Map集合、Collections使用

每日一句: 如果你不握紧拳头,你就不知道你力量到底有多大;如果你不咬紧牙关,你就不知道你的坚持到底有多狠;如果你不跺脚而起,你就不知道你的果决到底有多正确;如果你不瞪眼,你就不知道你的内心到底多强大。最强悍的竞争力只有两个字:行动。只有当你足够努力,你才会足够幸运。这世界不会辜负每一份努力和坚持。早安,共勉!

学习内容:泛型、Map集合的使用、Collections类的使用

  • 泛型

    • 泛型是JDK5的新特性,泛型机制,用泛型来指定集合中的存储的数据类型

    • 好处:

      • 泛型的好处,从集合中取出来的元素类型是泛型指定的类型,不需要进行大量的类型转换
      • 集合中存储的元素类型统一的
    • 坏处:

      • 导致集合中存储的元素缺乏多样性
      • 在大多数的时候,我们都是存储相同的类型
    • public class TestType {
          public static void main(String[] args) {
              //定义泛型,提高类型转换的安全性和稳定性
              List<String> list = new ArrayList<>();
              list.add("北京");
              list.add("长沙");
              list.add("武汉");
              //2让代码通用性更强
              Pointer<Integer> p1 = new Pointer<>(1,2);
              System.out.println(p1);
              Pointer<Double> p2 = new Pointer<>(1.1,1.2);
              System.out.println(p2);
      
          }
      }
      class Pointer<T>{
          T x;
          T y;
      
          public Pointer(T x, T y) {
              this.x = x;
              this.y = y;
          }
      
          @Override
          public String toString() {
              return "Pointer{" +
                      "x=" + x +
                      ", y=" + y +
                      '}';
          }
      }
      
  • Map集合(重点)

    • 无序、不可重复、Map集合的key和Set集合存储元素的特点相同

    • Map集合和Collection没有继承关系

    • Map集合是以key和value的方式存储数据的(键值对)

    • key和value都是引用数据类型、都是存储对象的内存地址

    • key起到了主导地位,value是key的一个附属品

    • HashMap接口

      • return typeMethodBrief Introduction
        vput(t,v)添加一个键值对到map集合当中
        intsize()返回键值对的个数
        vget(k)通过指定的key返回对于的value
        vremove(k)根据指定的key删除对应的value
        booleancontainsKey(Objectkey)判断map是否包含指定key如果包含true否则false
        booleancontainsValue(Object value)判断Map中是否存在value
        SetkeySet()将map中所有的key以set集合的形式返回
        Collectionvalues()获取map中所有的Value
        voidclear()清空map
        booleanisEmpty()判断键值对是否有值
        Set <Map.Entry<K,V>>entrySet()将Map集合转换成Set集合

        代码实现:

      • public static void main(String[] args) {
                Map<String,String> map = new HashMap<>();
                //1.v put(t,v); 添加一个键值对到map集合当中
        //        如果k存在则修改v
                map.put("1","北京");
                map.put("1","上海");
                map.put("1","深圳");
                map.put("1","广州");
                map.put("2","长沙"); //修改
        
                //size(); 返回键值对的个数
                System.out.println(map.size());
        
                //3. v get(k); 通过指定的key返回对于的value
        
                //4.删除 v remove(k); 根据指定的key删除对应的value
                map.remove("3");
                System.out.println(map);
        
                //5.booelan containsKey(key); 判断map是否包含指定key如果包含true否则false
                System.out.println(map.containsKey("3"));
        
                //6.Set keySet(); 将map中所有的key以set集合的形式返回
                Set<String> set = map.keySet();
                System.out.println(set);
        
                //注意HashMap,key值不能重复,可以为null,但只能有一个values可以重复,也可以有多个null
                //Collection values(); 获取map中所有的Value
                Collection c = map.values();
                System.out.println(c);
        
                //8 clear(); 清空map
                map.clear();
                System.out.println(map);
        
                //Map的迭代
                map = new HashMap<String,String>();
                map.put("1","吕布");
                map.put("2","关羽");
                map.put("3","赵云");
        //        1.使用增强for+keySet
                System.out.println(map);
                Set<String> set1=  map.keySet();
                for (String key:set1) {
                    System.out.println(key+":"+map.get(key));
                }
        //        2.使用迭代器
                Set<String> set2 = map.keySet();
                Iterator<String> it =  set2.iterator();
                while (it.hasNext()){
                    String key = it.next();
                    System.out.println(key+":"+map.get(key));
                }
        //        3.使用entry 效率最高
                Set<Map.Entry<String,String>> set3 = map.entrySet();
                for (Map.Entry<String,String> entry:set3) {
                    System.out.println(entry.getKey()+":"+ entry.getValue());
                }
                Map<Character,Integer> map1 = new HashMap<>();
                //定义一个字符串统计每个字符串出现的次数 如a:4 b:3等
                String str = "1hxdfdw6q3143rvrt";
                for (int i = 0; i < str.length(); i++) {
                    char tmp =  str.charAt(i);
                    if(map1.get(tmp) == null){
                        map1.put(tmp,1);
                    }else{
                        map1.put(tmp,map1.get(tmp)+1);
                    }
                }
                System.out.println(map);
            }
        
    • 散列表/哈希表

      • 哈希表HashMap使用不当时发挥性能
        • 假设所有的HashCode()方法返回值固定为某个值,那么会导致哈希表变成纯单向链表,这种情况我们称为,散列分布不均匀
        • 假设将所有的hashCode()方法返回值设定为不一样的值,可以吗?不行,因为这样的话会导致底层哈希表称为了一维数组没有了链表的概念
        • HashMap集合的默认初始化容量是16,默认加载因子是0.75这个默认加载因子是当HashMap集合底层数组的容量达到了75%的时候,数组开始扩容
        • HashMap集合的初始化容量必须是2的倍数,这也是官方推荐的,为了提高HashMap集合的存储效率
      • 如果一个类的equals方法重写了,那么必须重写他的hashCode方法
  • Collections使用

    • Collection:集合接口,其子接口有List、Set

    • Collections:是一个操作Set、List、Map等集合的工具类

    • MethodBrief Introduction
      sort(list)排序
      shuffle(list)随机打乱
      reverse(list)翻转
      copy (被复制,复制的集合)复制
      binarySearch(list,“小黑”)二分查找(必须先排序) 没有该元素则返回负数
      toArray(arr)List和数组之间相互转换
      Arrays.asList(arr1)数组转集合
    • 代码实现:

      •  public static void main(String[] args) {
                List<String> list = new ArrayList<>();
                list.add("小六");
                list.add("大红");
                list.add("小黑");
                list.add("旺财");
                list.add("来福");
                list.add("黑慧慧");
                list.add("小甜甜");
                System.out.println(list);
        
                //1.排序 sort(list);
                Collections.sort(list);
                System.out.println("排序后"+list);
        
                //2.随机打乱 shuffle(list);随机打乱
                Collections.shuffle(list);
                System.out.println("打乱后"+list);
        
                //3翻转 reverse(list)
                Collections.reverse(list);
                System.out.println("翻转后"+list);
        
                //4.复制 copy (被复制,复制的集合)
                List<String> list1= new ArrayList<>();
                Collections.copy(list,list1);
        
                //5.二分查找(必须先排序) 没有该元素则返回负数
                Collections.sort(list);
                System.out.println(list);
                int index = Collections.binarySearch(list,"小黑");
                System.out.println(index);
        
                //List和数组之间相互转换
                List<Integer> list2 = new ArrayList<>();
                list2.add(2);
                list2.add(3);
                list2.add(23);
                list2.add(32);
                list2.add(7);
                Integer[] arr= {};
                Integer[] ints = list2.toArray(arr);
                System.out.println(Arrays.toString(ints));
                //数组转集合
                String[] arr1 = {"123","12312","352","412"};
                List<String> list3= Arrays.asList(arr1);
                System.out.println(list3);
            }
        
  • 以上仅供参考,如有不对的地方,望指出!

  • gitee代码仓库地址:https://gitee.com/Zhengsenbing/java-se-basic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值