java集合整理总结

集合整理总结

一、单列集合

1、Collection接口

1.1、概述

概述:Collection是单列集合的顶级接口(interface)

1.2、特点

a.元素有序
b.元素可重复
c.没有索引

1.3、创建

Collection<E> 集合名 = new ArrayList<E>()

1.4、方法介绍

1boolean add(E e) : 将给定的元素添加到当前集合中(我们一般调add时,不用boolean接收,因为add一定会成功)

2boolean addAll(Collection<? extends E> c) :将另一个集合元素添加到当前集合中 (集合合并)

3void clear():清除集合中所有的元素

4boolean contains(Object o)  :判断当前集合中是否包含指定的元素

5boolean isEmpty() : 判断当前集合中是否有元素->判断集合是否为空

6boolean remove(Object o):将指定的元素从集合中删除

7int size() :返回集合中的元素数。

8Object[] toArray(): 把集合中的元素,存储到数组中
public class Test01 {
    public static void main(String[] args) {
        Collection<String> collection1 = new ArrayList<String>();
        //boolean add(E e) : 将给定的元素添加到当前集合中(我们一般调add时,不用boolean接收,因为add一定会成功)
        collection1.add("张无忌");
        collection1.add("赵敏");
        collection1.add("周芷若");
        collection1.add("灭绝师太");
        collection1.add("金毛狮王");
        collection1.add("青翼蝠王");
        collection1.add("白眉鹰王");
        collection1.add("紫衫龙王");
        System.out.println(collection1);
        //boolean addAll(Collection<? extends E> c) :将另一个集合元素添加到当前集合中 (集合合并)
        Collection<String> collection2 = new ArrayList<String>();
        collection2.add("乔峰");
        collection2.add("段誉");
        collection2.add("虚竹");

        collection1.addAll(collection2);
        System.out.println(collection1);
        //void clear():清除集合中所有的元素
        //collection1.clear();
        //System.out.println(collection1);

        //boolean contains(Object o)  :判断当前集合中是否包含指定的元素
        boolean result01 = collection1.contains("赵敏");
        System.out.println("result01 = " + result01);
        //boolean isEmpty() : 判断当前集合中是否有元素->判断集合是否为空
        boolean empty = collection1.isEmpty();
        System.out.println("empty = " + empty);
        //boolean remove(Object o):将指定的元素从集合中删除
        boolean result02 = collection1.remove("周芷若");
        System.out.println("result02 = " + result02);
        System.out.println(collection1);
        //int size() :返回集合中的元素数。
        System.out.println(collection1.size());
        //Object[] toArray(): 把集合中的元素,存储到数组中
        Object[] array = collection1.toArray();
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

2、List

2.1、概述

概述:List接口是Collection接口的子接口

2.2、实现类

ArrayList,LinkedList,Vector

3、ArrayList

3.1、概述

概述:ArrayListList接口的实现类

3.2、特点

a.元素有序
b.元素可重复
c.有索引
d.线程不安全

3.3、数据结构

数据结构:数组

3.4、常用方法

1boolean add(E e)  -> 将元素添加到集合中->尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值)
    
2void add(int index, E element) ->在指定索引位置上添加元素

3boolean remove(Object o) ->删除指定的元素,删除成功为true,失败为false
  
4E remove(int index) -> 删除指定索引位置上的元素,返回的是被删除的那个元素
  
5E set(int index, E element) -> 将指定索引位置上的元素,修改成后面的element元素
  
6E get(int index) -> 根据索引获取元素
  
7int size()  -> 获取集合元素个数
3.4.1、remove方法注意事项
public class Test03_ArrayList {
  public static void main(String[] args) {
      ArrayList<Integer> list = new ArrayList<>();
      list.add(2);

      /*
         remove(Object o)-> 删除指定元素
         remove(int index)->删除指定索引位置上的元素

         remove(2)-> 2是一个int型->自动匹配到了remove(int index)->删除指定索引位置上的元素

         但是list集合中没有2索引,所以报错
       */
      //list.remove(2);

      list.remove(new Integer(2));
      System.out.println(list);
  }
}

3.5、底层实现原理

1.问题:我们说过ArrayList是一个集合,集合的长度是可变的;ArrayList底层数据结构是数组,那么底层数据结构是数组怎么做到长度可变的呢?
    
2.ArrayList有一个空参构造:
  ArrayList() 构造一个初始容量为 10 的空列表
  
  注意:不是一new就创建一个长度为10的空列表,而是第一次add的时候才会创建长度为10的空列表
      
3.为啥说ArrayList底层是个数组,但是还要说ArrayList是长度可变的呢?
  elementData = Arrays.copyOf(elementData, newCapacity);->数组扩容,数组复制
4.怎么扩容的?
  elementData = Arrays.copyOf(elementData, newCapacity);->数组扩容,数组复制
      
5.扩容多少倍呢? 
  1.5

4、LinkedList

4.1、概述

概述:List接口下的实现类

4.2、特点

a.元素有序
b.元素可重复
c.有索引
d.线程不安全

4.3、数据结构

数据结构:双向链表

4.4、使用场景

我们有可能有大量的首尾元素的操作,LinkedList有很多特有方法,这些特有方法都是直接操作首尾元素的

4.5、方法

4.5.1、方法(和ArrayList方法相同)
1boolean add(E e)  -> 将元素添加到集合中->尾部(add方法一定能添加成功的,所以我们不用boolean接收返回值)
    
2void add(int index, E element) ->在指定索引位置上添加元素

3boolean remove(Object o) ->删除指定的元素,删除成功为true,失败为false
  
4E remove(int index) -> 删除指定索引位置上的元素,返回的是被删除的那个元素
  
5E set(int index, E element) -> 将指定索引位置上的元素,修改成后面的element元素
  
6E get(int index) -> 根据索引获取元素
  
7int size()  -> 获取集合元素个数
4.5.2 特有方法
1public void addFirst(E e):将指定元素插入此列表的开头。
  
2public void addLast(E e):将指定元素添加到此列表的结尾。

3public E getFirst():返回此列表的第一个元素。

4public E getLast():返回此列表的最后一个元素。
  
5public E removeFirst():移除并返回此列表的第一个元素。

6public E removeLast():移除并返回此列表的最后一个元素。
  
7public E pop():从此列表所表示的堆栈处弹出一个元素。
  
8public void push(E e):将元素推入此列表所表示的堆栈。
  
9public boolean isEmpty():如果列表不包含元素,则返回true

4.5、底层原理

4.5.1、LinkedList底层成员解释说明
1.LinkedList底层成员
  transient int size = 0;  元素个数
  transient Node<E> first; 第一个节点对象
  transient Node<E> last;  最后一个节点对象
  
2.Node代表的是结点对象
   private static class Node<E> {
        E item;//节点上的元素
        Node<E> next;//记录着下一个节点地址
        Node<E> prev;//记录着上一个节点地址

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }
4.5.2、LinkedList中add方法源码分析
LinkedList<String> list = new LinkedList<>();
list.add("a");
list.add("b");    

void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
}
4.5.3、查询速度
为了查询速度快:采用二分法查找思想

5、Vector

5.1、概述

Collection的实现类,从jdk1.0版本开始就有了,但是由于效率低,从jdk1.2开始变成了Collection实现类

5.2、特点

a.有序
b.有索引
c.元素可重复
d.线程安全

5.3、数据结构

数据结构:数组

5.4、方法

因为不经常使用,方法不在一一例举
方法同 ArrayList 

5.5、底层原理

a.Vectornew底层就会直接产生一个长度为10的空数组
b.数组扩容:Arrays.copyOf
    扩容2

6、Set

6.1、概述

概述:Set是一个接口,Collection下的子接口

6.2、方法

a.所有的方法和 Collection 接口中的方法一毛一样
  
b.set接口中的方法并没有对Collection中的方法进行任何的扩充

c.Set以及下面所有的实现类集合相当于是一个"傀儡"
    因为所有的set集合底层都是依靠map集合实现的

7、HashSet

7.1、概述

概述:HashSetSet接口的实现类对象

7.2、特点

a.元素无序
b.元素不可重复
c.无索引
d.线程不安全

7.3、数据结构

数据结构:哈希表
jdk8之前: 哈希表 = 数组+链表
jdk8之后: 哈希表 = 数组+链表+红黑树

7.4、方法

和Collection一毛一样
1boolean add(E e) : 将给定的元素添加到当前集合中(我们一般调add时,不用boolean接收,因为add一定会成功)

2boolean addAll(Collection<? extends E> c) :将另一个集合元素添加到当前集合中 (集合合并)

3void clear():清除集合中所有的元素

4boolean contains(Object o)  :判断当前集合中是否包含指定的元素

5boolean isEmpty() : 判断当前集合中是否有元素->判断集合是否为空

6boolean remove(Object o):将指定的元素从集合中删除

7int size() :返回集合中的元素数。

8Object[] toArray(): 把集合中的元素,存储到数组中

7.5、如何做到元素唯一

重写hashCode和equals方法
a.先计算元素哈希值进行比较,再比较内容
b.如果哈希值不一样,存
c.如果哈希值一样,再比较内容
d.如果哈希值一样,内容不一样,存
e.如果哈希值一样,内容一样,元素覆盖
f.后面覆盖前面

8、LinkedHashSet

8.1、概述

概述:LinkedHashSet extends HashSet

8.2、特点

a.元素有序
b.元素不可重复
c.无索引
d.线程不安全

8.3、数据结构

数据结构:哈希表+双向链表

8.4、方法

和HashSet一样
1boolean add(E e) : 将给定的元素添加到当前集合中(我们一般调add时,不用boolean接收,因为add一定会成功)

2boolean addAll(Collection<? extends E> c) :将另一个集合元素添加到当前集合中 (集合合并)

3void clear():清除集合中所有的元素

4boolean contains(Object o)  :判断当前集合中是否包含指定的元素

5boolean isEmpty() : 判断当前集合中是否有元素->判断集合是否为空

6boolean remove(Object o):将指定的元素从集合中删除

7int size() :返回集合中的元素数。

8Object[] toArray(): 把集合中的元素,存储到数组中

8.5、 如何做到元素唯一

重写hashCode和equals方法
a.先计算元素哈希值进行比较,再比较内容
b.如果哈希值不一样,存
c.如果哈希值一样,再比较内容
d.如果哈希值一样,内容不一样,存
e.如果哈希值一样,内容一样,元素覆盖
f.后面覆盖前面

9、TreeSet

9.1、概述

概述:TreeSetSet接口的实现类

9.2、特点

a.可以对元素进行排序
b.元素唯一
c.无索引
d.线程不安全

9.3、数据结构

数据结构:红黑树

9.4、方法

和HashSet一样
1boolean add(E e) : 将给定的元素添加到当前集合中(我们一般调add时,不用boolean接收,因为add一定会成功)

2boolean addAll(Collection<? extends E> c) :将另一个集合元素添加到当前集合中 (集合合并)

3void clear():清除集合中所有的元素

4boolean contains(Object o)  :判断当前集合中是否包含指定的元素

5boolean isEmpty() : 判断当前集合中是否有元素->判断集合是否为空

6boolean remove(Object o):将指定的元素从集合中删除

7int size() :返回集合中的元素数。

8Object[] toArray(): 把集合中的元素,存储到数组中

9.5、构造方法

1.构造:
  TreeSet()  -> 对元素进行自然排序-> ASCII
  TreeSet(Comparator<? super E> comparator) -> 按照指定规则进行排序

9.6、demo

public class Person {
    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name) &&
                Objects.equals(age, person.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

public class Demo01TreeSet {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("b");
        set.add("a");
        set.add("d");
        set.add("c");
        System.out.println(set);

        System.out.println("=========================");

        TreeSet<Person> set1 = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        set1.add(new Person("涛哥",12));
        set1.add(new Person("柳岩",36));
        set1.add(new Person("曼曼",26));
        System.out.println(set1);
    }
}
	

二、双列集合

1、Map

1.1、概述

1.概述:双列集合的顶级接口
2.组成部分:
  一个元素是有两部分构成
  key = value  -> 键值对

2、HashMap

2.1、概述

Map的实现类

2.2、特点

a.元素无序
b.key唯一,value可重复
c.无索引
d.线程不安全
e.能存null键null值

2.3、数据结构

数据结构:哈希表

2.4、方法

1V put(K key, V value)  -> 存储元素
  
2V remove(Object key)  ->根据key删除对应的键值对
  
3V get(Object key)  -> 根据key获取对应的value
  
4boolean containsKey(Object key) ->判断Map中是否包含指定的key
  
5Collection<V> values()  ->Map中所有的value存储到Collection集合中
  
6Set<K> keySet() ->Map中所有的key获取出来存到Set集合中 
  
7Set<Map.Entry<K,V>> entrySet() -> 获取Map中所有的键值对对象,放到set集合中

2.5、注意

如果key重复了,后面的会把前面的覆盖掉,去重复过程和set一毛一样
public class Test01_HashMap {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        //V put(K key, V value)  -> 存储元素
        hashMap.put("涛哥","柳岩");
        hashMap.put("黄晓明","杨颖");
        hashMap.put("文章","马伊琍");
        hashMap.put("文章","姚笛");
        hashMap.put("宝强","马蓉");
        hashMap.put("宋喆","马蓉");
        System.out.println(hashMap);
        //V remove(Object key)  ->根据key删除对应的键值对
        String value = hashMap.remove("涛哥");
        System.out.println(value);
        System.out.println(hashMap);
        //V get(Object key)  -> 根据key获取对应的value
        String value1 = hashMap.get("黄晓明");
        System.out.println(value1);
        //boolean containsKey(Object key) ->判断Map中是否包含指定的key
        boolean result = hashMap.containsKey("涛哥");
        System.out.println("result = " + result);
        //Collection<V> values()  -> 将Map中所有的value存储到Collection集合中

        Collection<String> collection = hashMap.values();
        for (String s : collection) {
            System.out.println(s);
        }
    }
}

2.6、如果做到key唯一

key重写hashCode和equals方法
	a.先计算元素哈希值进行比较,再比较内容
	b.如果哈希值不一样,存
	c.如果哈希值一样,再比较内容
	d.如果哈希值一样,内容不一样,存
	e.如果哈希值一样,内容一样,元素覆盖
		后面覆盖前面

3、LinkedHashMap

3.1、概述

概述:LinkedHashMap extends HashMap

3.2、特点

a.有序
b.无索引
c.key唯一,value可重复
d.线程不安全
e.能存nullnull

3.3、数据结构

哈希表+双向链表

3.4、方法

和HashMap一样
1V put(K key, V value)  -> 存储元素
  
2V remove(Object key)  ->根据key删除对应的键值对
  
3V get(Object key)  -> 根据key获取对应的value
  
4boolean containsKey(Object key) ->判断Map中是否包含指定的key
  
5Collection<V> values()  ->Map中所有的value存储到Collection集合中
  
6Set<K> keySet() ->Map中所有的key获取出来存到Set集合中 
  
7Set<Map.Entry<K,V>> entrySet() -> 获取Map中所有的键值对对象,放到set集合中

3.5、如果做到key唯一

key重写hashCode和equals方法
	a.先计算元素哈希值进行比较,再比较内容
	b.如果哈希值不一样,存
	c.如果哈希值一样,再比较内容
	d.如果哈希值一样,内容不一样,存
	e.如果哈希值一样,内容一样,元素覆盖
		后面覆盖前面

4、TreeMap

4.1、概述

概述:TreeMapMap接口的实现类

4.2、特点

1.特点
	a.key唯一
	b.可以对key进行排序
	c.无索引
	d.线程不安全
	e.能存nullnull

4.3、数据结构

红黑树

4.4、方法

和HashMap一样
1V put(K key, V value)  -> 存储元素
  
2V remove(Object key)  ->根据key删除对应的键值对
  
3V get(Object key)  -> 根据key获取对应的value
  
4boolean containsKey(Object key) ->判断Map中是否包含指定的key
  
5Collection<V> values()  ->Map中所有的value存储到Collection集合中
  
6Set<K> keySet() ->Map中所有的key获取出来存到Set集合中 
  
7Set<Map.Entry<K,V>> entrySet() -> 获取Map中所有的键值对对象,放到set集合中

4.5、构造方法

TreeMap() -> 按照自然顺序对key进行排序

TreeMap(Comparator<? super K> comparator)-> 按照指定规则对key进行排序 

4.6、demo

public class Person {
    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return Objects.equals(name, person.name) &&
                Objects.equals(age, person.age);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

public class Demo02TreeMap {
    public static void main(String[] args) {
        TreeMap<String, String> treeMap = new TreeMap<>();
        treeMap.put("b","疑是地上霜");
        treeMap.put("d","低头思故乡");
        treeMap.put("a","床前明月光");
        treeMap.put("c","举头望明月");
        System.out.println(treeMap);

        System.out.println("========================");

        TreeMap<Person, String> treeMap1 = new TreeMap<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge()-o2.getAge();
            }
        });
        treeMap1.put(new Person("涛哥",10),"廊坊");
        treeMap1.put(new Person("柳岩",36),"湖南");
        treeMap1.put(new Person("曼曼",26),"东北");
        System.out.println(treeMap1);
    }
}

5、Hashtable

5.1、概述

概述:是Map的实现类,从jdk1.0开始就有,但是由于效率低,所以从jdk1.2开始变成了map的实现类

5.2、特点

1.特点
	  a.无序
	  b.key唯一,value可重复
	  c.无索引
	  d.线程安全
	  e.不能存储null,null

5.3、数据结构

哈希表

5.4、方法

和HashMap一样
1V put(K key, V value)  -> 存储元素
  
2V remove(Object key)  ->根据key删除对应的键值对
  
3V get(Object key)  -> 根据key获取对应的value
  
4boolean containsKey(Object key) ->判断Map中是否包含指定的key
  
5Collection<V> values()  ->Map中所有的value存储到Collection集合中
  
6Set<K> keySet() ->Map中所有的key获取出来存到Set集合中 
  
7Set<Map.Entry<K,V>> entrySet() -> 获取Map中所有的键值对对象,放到set集合中

6、Properties

6.1、概述

概述:Properties是Hashtable的子类

6.2、特点

1.特点
	  a.无序
	  b.key唯一,value可重复
	  c.无索引
	  d.线程安全
	  e.Properties的key和value类型默认是String
	  f.不允许有null键null值

6.3、数据结构

哈希表

6.4、方法

6.4.1、方法
和HashMap一样
1V put(K key, V value)  -> 存储元素
  
2V remove(Object key)  ->根据key删除对应的键值对
  
3V get(Object key)  -> 根据key获取对应的value
  
4boolean containsKey(Object key) ->判断Map中是否包含指定的key
  
5Collection<V> values()  ->Map中所有的value存储到Collection集合中
  
6Set<K> keySet() ->Map中所有的key获取出来存到Set集合中 
  
7Set<Map.Entry<K,V>> entrySet() -> 获取Map中所有的键值对对象,放到set集合中
6.4.2、特有方法
1Object setProperty(String key, String value)  -> 存储键值对
2String getProperty(String key)  -> 根据key获取value
3Set<String> stringPropertyNames()  -> 获取所有的key,存放到Set集合中
4void load(InputStream inStream)  ->  将流中的数据信息加载到Properties集合中 (IO流部分讲)

三、

1、迭代器

Iterator
	a.获取
		Collection中的方法
			Iterator iterator()
	b.方法
		hasNext()
			判断有没有下一个元素
		next()
			获取下一个元素
	c.并发修改异常
		实际操作次数和预期操作次数不相等

2、增强for

2.增强for
	a.格式
		for(元素类型 变量名:集合名或者数组名){}
	b.注意
		遍历集合时,原理为迭代器
		遍历数组时,原理为普通for

3、泛型

3.泛型
	a.含有泛型的类
		public class 类名<E>{}
		new对象时确定类型
	b.含有泛型的方法
		修饰符 <E> 返回值类型 方法名(E e){}
		调用的时候确定类型
	c.含有泛型的接口
		public interface 接口名<E>{}
		实现类时候确定类型
		new实现类对象的时候确定类型
	d.泛型高级使用
		上限
			<? extends>
				?接收的类型为后面类的本类以及子类
		下限
			<? super>
				?接收的类型为后面类的本类以及父类

4、Collections集合工具类

4.Collections集合工具类
	  static <T> boolean addAll(Collection<? super T> c, T... elements)->批量将元素存到集合中
	  static void shuffle(List<?> list) -> 将集合中的元素顺序打乱 
	  static  <T> void sort(List<T> list) ->将集合中的元素按照默认规则排序->ASCII
	  static <T> void sort(List<T> list, Comparator<? super T> c)->将集合中的元素按照指定规则排序 

5、数据结构

5.数据结构
	栈
		先进后出
	队列
		先进先出
	数组
		查询快
		增删慢
	链表
		查询慢
		增删快 
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值