javaee 易混淆知识点之集合类

1.单列集合(Collection)

1.1 单列集合概述

java.util.Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素。

单列集合:以单个对象作为存储元素的集合类型。

1.2 单列集合继承体系

java.util.List 有序单列集合接口

  • 特点:元素有索引,元素有序(先进先出)、元素可重复
  • 常用子类
    java.util.ArrayList 数组结构,查询快,增删慢,线程不安全
    java.util.LinkedList 链表结构,查询慢,增删快,线程不安全
    java.util.Vector 数组结构,查询较快,增删慢,线程安全
    java.util.Set` 无序单列集合接口
  • 特点:元素无索引,元素无序、元素不可重复
  • 常用子类
    java.util.HashSet 哈希结构,不可排序
    |-- java.util.LinkedHashSet 链表+哈希表结构,可排序
    java.util.TreeSet 二叉树结构,可排序

1.3单列集合(Collection)常用功能

1.3.1 构造方法

由于Collection是一个接口,不能创建对象,需要使用其子类ArrayLiist类型的创建对象。

1.3.2Collection集合常用功能

public boolean add(E e):  把给定的对象添加到当前集合中 。
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(Object obj): 判断当前集合是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中
public void clear():清空集合中所有的元素。

tips: 有关Collection中的方法可不止上面这些,其他方法可以自行查看API学习。

1.3.3演示单列集合常用功能
需求:通过ArrayList类演示单列集合常用功能

import java.util.Collection;

public class Arraylisttest {
    public static void main(String[] args) {
        //创建集合对象
        Collection<String> c1 = new ArrayList<>();
        //public boolean add(E e)  向集合中添加元素
        c1.add("abc");
        c1.add("def");
        c1.add("hij");
        System.out.println(c1);
        System.out.println("------------------");
        //public boolean remove(E e)  删除集合中元素
        c1.remove("abc");
        System.out.println(c1);
        System.out.println("------------------");
        //public boolean contains(Object obj)  判断是否包含指定的元素

        System.out.println(c1.contains("hij"));
        System.out.println(c1.contains("ab"));
        System.out.println("------------------");
        //public boolean isEmpty() 判断是否为空
        System.out.println(c1.isEmpty());
        System.out.println("------------------");
        //public int size() 获取集合的长度
        System.out.println(c1.size());
        System.out.println("------------------");
        //public Object[] toArray()  将集合转换成一个数组
        Object[] array = c1.toArray();
        System.out.println("打印的是地址值:"+array);
        //循环遍历数组
        for (Object o : array) {
            System.out.println(o);

        }

    }
}

测试结果

[abc, def, hij]
------------------
[def, hij]
------------------
true
false
------------------
false
------------------
2
------------------
打印的是地址值:[Ljava.lang.Object;@4554617c
def
hij

2.list集合

  • List的常用子类

目标:

  • 了解List接口的实现类

步骤:

  • ArrayList集合
  • LinkedList集合常用方法
  • 演示LinkedList集合常用方法

讲解:

5.3.1ArrayList集合

java.util.ArrayList集合数据存储的结构是数组结构。由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

但不建议随意地使用ArrayList完成任何需求,并不严谨,需要根据需求考虑。

ArrayList集合特点:查询快,增删慢,线程不安全

5.3.2LinkedList集合

java.util.LinkedList集合数据存储的结构是双向链表结构。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。

双链表原理图

LinkedList集合特点:查询慢,增删快,线程不安全

LinkedList集合常用方法(了解即可)

- public void addFirst(E e):将指定元素插入此列表的开头。
- public void addLast(E e):将指定元素添加到此列表的结尾。
- public E getFirst():返回此列表的第一个元素。
- public E getLast():返回此列表的最后一个元素。
- public E removeFirst():移除并返回此列表的第一个元素。
- public E removeLast():移除并返回此列表的最后一个元素。
- public E pop():从此列表所表示的堆栈处弹出一个元素。
- public void push(E e):将元素推入此列表所表示的堆栈。
- public boolean isEmpty():如果列表不包含元素,则返回true

3.Collections工具类

3.1概述

java.utils.Collections是集合工具类,用来对集合进行操作。

3.2常用方法

  • public static void shuffle(List<?> list):打乱集合顺序。
  • public static void sort(List list):将集合中元素按照默认规则排序。

3.3演示Collections的工具的使用

package com.itheima.demo3_集合类;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class CollectionsTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        System.out.println(list);
        //打乱集合顺序 public static void shuffle(List<?> list)
        Collections.shuffle(list);
        System.out.println("打乱后的顺序为:"+list);
        //public static <T> void sort(List<T> list)`:将集合中元素按照默认规则排序。
        Collections.sort(list);
        System.out.println("恢复原顺序:"+list);



    }

}

输出结果

[a, b, c, d, e]
打乱后的顺序为:[e, a, b, c, d]
恢复原顺序:[a, b, c, d, e]

4.Comparator比较器

4.1概述

	public interface Comparator<T>  定义比较对象规则的接口

4.2常用方法

public int compare(T  o1,T  o2) 比较用来排序的两个参数
	o1一般代表正着添加的元素,o2表示已经添加过的元素。根据第o1与o2的比较结果,返回负整数、零或正整数实现排序。
	默认使用方式
 		升序   根据o1的值与o2的值做比较(o1-o2)
 		降序   根据o2的值与o1的值做比较(o2-o1)

4.3 应用场景

	Collections工具类中:	public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。

4.4演示Comparator比较器的应用

需求:演示Comparator在集合工具类排序功能中的使用

package com.itheima.demo3_集合类;

import java.util.*;

/**
 * @author BieBer
 */
public class Comparator比较器 {
    public static void main(String[] args) {
       List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(6);
        list.add(3);
        list.add(5);
        list.add(4);
        System.out.println(list);
        System.out.println("--------");

        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                //升序
                return o1-o2;
                //降序
               // return o2-o1;
            }
        });
        System.out.println(list);


    }
}

测试结果

[1, 6, 3, 5, 4]
--------
[1, 3, 4, 5, 6]

5.Set接口2.1.1Set集合概述

  • java.util.Set接口继承自Collection接口,是单列集合的一个重要分支。实现了Set`接口的对象称为Set集合。

  • Set集合没有对于Collection功能的额外扩充,但是有更加完善的存储机制。

  • Set集合无索引,只能是用增强for和迭代器遍历

5.1Set接口特点

  • 元素无索引,元素存取无序,元素不可重复(唯一)

5.2Set集合常用子类

java.util.HashSet:哈希表结构集合

java.util.LinkedHashSet:链表结构集合

java.util.TreeSet:树结构集合

6.HashSet基本使用

6.1概述

java.util.HashSet是Set接口的一个实现类

底层的实现其实是一个java.util.HashMap支持

根据对象的哈希值来确定元素在集合中的存储位置,具有良好的存储和查找性能

元素唯一,底层依赖hashCode与equals方法。

6.2特点

  • 元素无索引,元素存取无序,元素不可重复(唯一)

6.3演示HashSet的使用

需求:在测试类中演示HashSet的基本使用

package com.itheima.demo3_集合类;

import java.util.HashSet;

public class HashSet{
    public static void main(String[] args) {
        HashSet<String> hs = new HashSet<>();
        hs.add("abc");
        hs.add("def");
        System.out.println(hs);
        hs.add("ghi");
        hs.add("abc");
        System.out.println(hs);
    }
}
[abc, def]
[abc, def, ghi]

7.map类

7.1Map集合概述

java.util.Map双列集合的顶层接口,用来存储具备映射关系对象的集合接口定义。

映射关系:生活中类似IP地址与主机名、身份证号与个人等一一对应的对应关系。

Map集合中存储的内容根据映射关系分为两部分,称为键值对

  • 键(Key)不能包含重复的键,
  • 值(Value)可以重复;
  • 每个键只能对应一个值。

7.2Map集合与Collection集合区别

  • Collection集合中的元素,是以单个的形式存储。称为单列集合
  • Map集合中的元素,是以键值对的形式存储。称为双列集合

7.3Map的常用子类介绍

HashMap<K,V>

  • 存储数据采用的哈希表结构,元素的存取顺序不能保证一致。
  • 由于要保证键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

LinkedHashMap<K,V>

  • HashMap的子类,存储数据采用的哈希表结构+链表结构。
  • 通过链表结构可以保证元素的存取顺序一致;
  • 通过哈希表结构可以保证的键的唯一、不重复,需要重写键的hashCode()方法、equals()方法。

TreeMap<K,V>

  • TreeMap集合和Map相比没有特有的功能,底层的数据结构是红黑树;
  • 可以对元素的键进行排序,排序方式有两种:自然排序和比较器排序

tips:Map接口中的集合都有两个泛型变量<K,V>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<K,V>的数据类型可以相同,也可以不同。

7.4Map的常用方法

常用方法

  • public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。
    • 若指定的键(key)在集合中不存在,则集合中没有这个键对应的值,返回null,并把指定的键和值添加到集合中;
    • 若指定的键(key)在集合中存在,则返回集合中该键对应的原值,并把指定键所对应的值,替换成指定的新值。
  • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
  • public Set keySet(): 获取Map集合中所有的键,存储到Set集合中。
  • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
  • public boolean containKey(Object key):判断该集合中是否有此键。

演示Map的常用方法

需求:通过HashMap演示Map集合常用方法

7.5测试类代码

package com.itheima.demo3_集合类.map类;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
- public V put(K key, V value):  把指定的键与指定的值添加到Map集合中。
  - 若指定的键(key)在集合中不存在,则集合中没有这个键对应的值,返回null,并把指定的键和值添加到集合中;
  - 若指定的键(key)在集合中存在,则返回集合中该键对应的原值,并把指定键所对应的值,替换成指定的新值。
- public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
- public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
- public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
- public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。
- public boolean containKey(Object key):判断该集合中是否有此键。

 */

public class test {
    public static void main(String[] args) {
        //创建Map集合子类对象
        HashMap<String, String> map = new HashMap<>();
        // public V put(K key, V value)

        map.put("1","a");
        map.put("2","b");
        map.put("2","c");//覆盖上一个元素
        System.out.println(map);
        System.out.println("----------------");
        //public V remove(Object key)
        map.remove("2");
        System.out.println(map);
        System.out.println("----------------");
        // public V get(Object key)
        System.out.println(map.get("1"));
        System.out.println(map.get("2"));
        System.out.println("----------------");
        // public Set<K> keySet()
        map.put("3","c");
        Set<String> strings = map.keySet();
        System.out.println(strings);
        System.out.println("----------------");
        // public Set<Map.Entry<K,V>> entrySet()
        Set<Map.Entry<String, String>> ens = map.entrySet();
        System.out.println(ens);
        System.out.println("----------------");
        // public boolean containKey(Object key)
        System.out.println(map.containsKey("1"));
        System.out.println(map.containsKey("2"));
        System.out.println(map.containsKey("3"));

    }
}

结果

{1=a, 2=c}
----------------
{1=a}
----------------
a
null
----------------
[1, 3]
----------------
[1=a, 3=c]
----------------
true
false
true

8.Map的遍历

8.1方式1:键找值

通过元素中的键,获取键所对应的值

步骤:

  • 获取Map中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键。方法提示:keyset()
  • 遍历键的Set集合,得到每一个键。
  • 根据键,获取键所对应的值。方法提示:get(K key)

8.2方式2:键值对

通过集合中每个键值对(Entry)对象,获取集合中所有键值对(Entry)对象中的键与值。

Map中存放的是两种对象,一种称为key(键),一种称为value(值).

java.util.Map.Entry 将键值对的对应关系封装成了对象。Map的内部接口定义,具体功能由Map子类负责具体实现。

Entry中的常用方法

  • public K getKey():获取Entry对象中的键。
  • public V getValue():获取Entry对象中的值。

Map中获取所有键值对对象Set集合:public Set<Map.Entry<K,V>> entrySet()

步骤:

  • 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。方法提示:entrySet()。
  • 遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象。
  • 通过键值对(Entry)对象,获取Entry对象中的键与值。 方法提示:getkey() getValue()

tips:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。

8.3演示两种遍历方式

需求:演示Map集合的两种遍历方式

//测试类代码

package com.itheima.demo3_集合类.map类;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class biabliTest {
    public static void main(String[] args) {
        //定义Map集合,并存储元素。
        HashMap<String, String> map = new HashMap<>();
        map.put("1", "a");
        map.put("2", "b");
        //遍历方式1:使用键获取值
        // 步骤1:使用keySet获取键的集合
        Set<String> strings = map.keySet();
        // 步骤2:遍历键的集合,利用获取的键得到对应的值
        for (String key : strings) {
            String value = map.get(key);
            System.out.println(key + "=" + value);

        }
        System.out.println("-------------");
        //遍历方式2:使用键值对对象遍历
        // 步骤1:使用entrySet获取键值对对象的集合
        Set<Map.Entry<String, String>> ens = map.entrySet();
        // 步骤2:遍历键值对集合,获取每一个键值对对象
        for (Map.Entry<String, String> en: ens){
            // 步骤3:使用键值对对象类中的getKey()获取键,使用getValue()获取值。
            String key = en.getKey();
            String value = en.getValue();
            System.out.println(key+"="+value);

        }

    }
}

结果

1=a
2=b
-------------
1=a
2=b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值