学习笔记——java集合类:

首先看图对java集合框架有个大致认识

1.JDK提供一系列类,这些类可以存储任意类型的对象,并且长度可变,统称为集合。

2.集合按存储结构可分为单链集合(Collection)双链集合类(Map)

        Collection(根接口)有两个接口List,Set(子接口)

        Map接口用于存储具有键(Key)、值(Value)映射关系的元素。主要实现类又HashMap和TreeMap

3.常用类有ArrayList    LinkedList    HashSet     HashMap

Collection

List:

所有的元素线性存储,可以重复,通过索引访问,元素有序

  • ArrayList:
  1. 前面的博客已经写过不在举例(自定义队列:https://blog.csdn.net/weixin_42621338/article/details/82080167
  2. 优点:查找快,通过索引方式访问元素
  3. 缺点:增删慢,增删元素会需要创建新的数组,效率低
  • LinkedList:
  1. 前面的博客已经写过不在举例(自定义链表:https://blog.csdn.net/weixin_42621338/article/details/82180021
  2. 优点:增删快,链表中都用引用或者地址(指针)的方式和前后元素实现连接,增删的时候只需要改变元素之间的地址引用
  3. 缺点:查找慢,要从头节点通过引用或者地址一个个访问

set:

  • HashSet:
  1. set中的元素不能重复的
	public void demo1() {
		HashSet<String> hs = new HashSet<String>();
		hs.add("AAA");
		System.out.println(hs+"first");
		hs.add("AAA");
		System.out.println(hs+"second");
	}
输出:   [AAA]first
        [AAA]second

     2.Set中的元素,没有顺序,严格的说,是没有按照元素的插入顺序排列。实际上里面的顺序会受到很多因素的印象,比如说JDK版本。但总是不是插入顺序就对了。

	public void demo2() {
		HashSet<String> hs = new HashSet<String>();
		hs.add("AAA");
		hs.add("BBB");
		hs.add("CCC");
		System.out.println(hs);
	}
输出 [AAA, CCC, BBB]

     3.Set不提供get()来获取指定位置的元素,所以遍历需要用到迭代器,或者增强型for循环

  • TreeSet
  1. TreeSet可以确保集合元素处于排序状态
public static void main(String[] args) {
		TreeSet nums=new TreeSet();
		nums.add(5);
		nums.add(2);
		nums.add(3);
		nums.add(8);
		//输出集合元素,可以看到集合元素已经处于排序状态,输出【2,3,5,8】
		System.out.println(nums);
		//输出集合里的第一个元素,为2
		System.out.println(nums.first());
		//输出集合里最后一个元素,为8
		System.out.println(nums.last());
	}
 

    2.TreeSet也不提供get()来获取指定位置的元素,所以遍历需要用到迭代器,或者增强型for循环

    3.TreeSet支持两种排序方式,自然排序 和定制排序
       如果要将自定义对象存入treeset中需要重新定义Comparable接口

Map:

  • hashmap

  1. HashMap储存数据的方式是键值对(key——value),通过key找到value
public class Test {
    public static void main(String[] args) {
        HashMap<String,String> dictionary = new HashMap<>();
        dictionary.put("adc", "物理英雄");
        dictionary.put("apc", "魔法英雄");
        dictionary.put("t", "坦克");
        
        System.out.println(dictionary.get("t"));
    }
}
  1.  
  2. 对于HashMap而言,key是唯一的,不可以重复
public class Test {
    public static void main(String[] args) {
        HashMap<String,Hero> heroMap = new HashMap<String,Hero>();
        
        heroMap.put("gareen", new Hero("gareen1"));
        System.out.println(heroMap);
        
        //key为gareen已经有value了,再以gareen作为key放入数据,会导致原英雄,被覆盖
        //不会增加新的元素到Map中
        heroMap.put("gareen", new Hero("gareen2"));
        System.out.println(heroMap);
        
        //清空map
        heroMap.clear();
        Hero gareen = new Hero("gareen");
        
        //同一个对象可以作为值插入到map中,只要对应的key不一样
        heroMap.put("hero1", gareen);
        heroMap.put("hero2", gareen);
        
        System.out.println(heroMap);
        
    }
}
  1. TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。

猜你喜欢

转载自blog.csdn.net/weixin_42621338/article/details/82557054