java的集合知识点

目录

java的部分数据结构:

基本数据类型的包装类:

集合与数组的区别:

 Collection常用方法:

集合遍历方式使用场景:

List:

ArrayList特点:

LinkedList特点:

LinkedList特有方法:

 Set集合:

HeshSet集合:

TreeSet集合:

比较器:

Map集合:

map集合常用方法:

map集合遍历方式:

HashMap集合底层原理:

TreeMap底层原理:


java的部分数据结构:

  • 栈(弹夹):先进后出
  • 队列(隧道):先进先出
  • 数组:内存地址连续,有索引,增删慢(数组长度不可变,若要增删,就要对整个数组进行复值,再修改),查询快。
  • 链表:内存地址分散,每个元素分为两部分(存储内容+下一个元素地址),没有索引,查询慢,增删快。

基本数据类型的包装类:

int  -> Integer;  cahr -> Character;其它的都是把首字母大写,基本没变

集合与数组的区别:

        集合与数组的相同点:

                都是容器,可以存储多个数据。

        集合与数组的不同点:

  1. 数组的长度不可变的,集合的长度是可变的。
  2. 数组可以存储基本数据类型和引用数据类型,集合只能存储引用数据类型,如果要存储基本数据类型,需要存对应的包装类。

java的集合知识点_第1张图片

 Collection常用方法:

ArrayList list = new ArrayList();
//添加元素
list.add("aa");
//删除元素
list.remove(aa);
//1清空集合所有元素
lsit.clear();
//判断集合是否为空
list.isEmpty();
//判断是否包含某个元素
lsit.contains("aa");

 迭代器的使用:

  1. 通过集合对象获取迭代器对象
  2. 通过hasNext()方法循环判断迭代器对象中是否还有元素
  3. 如果有元素,通过next()方法获取迭代器中的元素

迭代器原理分析:

  • Iterator iterator(): 获取迭代器对象,默认指向0索引
  • boolean hasNext():判断当前位置是否有元素可以取出
  • E.next(0:获取当前位置元素,将迭代器对象移向下一个索引位置

集合遍历方式使用场景:

三种遍历方式使用场景:

增强for循环:

        对集合进行遍历时使用,遍历过程中如要增删元素不能使用,

普通for循环:

        遍历过程中需要增删元素或操作索引时使用

迭代器:

        遍历过程中删除元素使用

List:

list集合概述:

list集合是单列集合体系之一

list集合特点:

  1. list集合及其实现类全部都有索引
  2. list集合及其实现类全部都是可以存储重复元素
  3. list集合及其实现类全部都是元素存取有序
ArrayList list = new ArrayList();

//list特有方法,可以根据索引删除添加指定位置

//修改指定位置元素
lsit.set(2,"ee");
//根据索引获取指定元素
list.get(2);

ArrayList特点:

底层数据结构是数组:查询快,增删慢

LinkedList特点:

底层数据结构是链表:查询慢,增删快

查询慢:因为需要从一侧开始依次查询

增删快;增删元素后,不需要动元素位置,只需要修改元素指向

LinkedList特有方法:

java的集合知识点_第2张图片

 Set集合:

set集合的特点:

  1. 不能存储重复元素
  2. 没有索引

哈希值;

哈希值是JDK根据对象的地址或者字符串或者数字计算出来的int类型的数值。

获取哈希值对象:int hascCode();返回对象的哈希码值。

HeshSet集合:

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不作保证,不保证存储与取出的元素顺序一致
  • 没有索引,所以不能使用普通for循环遍历
  • 由于是set集合的实现类,所以不能有重复元素(去重)

java的集合知识点_第3张图片

 数据结构之哈希表:

  • JDK8之前,底层采用数组+链表实现(链表的数组)
  • JDK8之后,在长度较大的时候,底层进行了优化,

TreeSet集合:

特点:

  • 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法

TreeSet():根据其元素的自然顺序进行排序

TreeSet(Comparator compartor):根据指定的比较器进行排序

  • 没有索引,所以不能通过普通for循环遍历
  • 不包含重复元素

比较器:

自然排序:Comparable

  • 使用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序
  • 自然排序就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
  • 重写方法时,一定要注意排序规则,必须按照要求的主要条件和次要条件来写
/用接口实现排序规则,不用在treeset后面new Comparator
    //this:前,o:后
    @Override
    public int compareTo(Student o) {
        int age = this.getAge() - o.getAge();
        if (age == 0){
            age = this.getName().length()  - this.getName().length();
        }
        return age;
    }

选择排序:comparator

  • 使用TreeSet集合存储自定义对象,有参构造方法使用的是比较器排序对元素进行排序
/比较器
//要求,字符串按照升序排列
//自定义排序规则
public class demo2 {
    public static void main(String[] args) {
        TreeSet set = new TreeSet<>(new Comparator() {
            //在方法里面自定义排序规则
            //口诀:前减后升(从小到大),后减前降(从大到小)
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();//升序
            }
        });

        set.add("aa");
        set.add("aaa");
        set.add("ddd");
        set.add("ggggg");
        System.out.println(set);
    }
}
前减后升(从小到大),后减前降(从大到小)

两种排序方式的比较:

自然排序:

  1. 自定义类实现Comparable接口
  2. 重写compareTo方法,根据返回值进行排序

选择排序:

  1. 创建TreeSet对象的时候传递Comparator的实现类对象
  2. 重写compare方法,根据返回值进行排序

在使用的时候,默认使用自然排序,如果无法满足需求时,必须使用比较器排序。

Map集合:

map集合的特点:

  1. 双利集合,一个键对应一个值
  2. 键不可以重复,值可以重复

map集合常用方法:

public static void main(String[] args) {
        HashMap map = new HashMap<>();

        //添加数据
        map.put("杨过","小龙女");
        map.put("郭靖","黄蓉");
        map.put("李白","凤求凰");

        //清空集合
        //map.clear();

        //集合元素长度
        int size = map.size();
        System.out.println("size = " + size);

        //判断是否没有元素
        boolean empty = map.isEmpty();
        System.out.println("empty = " + empty);//没有元素就是true有元素就是false

        //判断集合是否包含某个key
        boolean a = map.containsKey("aa");
        System.out.println("a = " + a);

        //判断是否包含某个value
        boolean s = map.containsValue("小龙女");
        System.out.println("s = " + s);

        //size和length获取长度的区别
        int[] arr = new int[3];
        System.out.println("arr = " + arr.length);//没有小括号是属性
        int size1 = map.size();//有小括号是方法
        System.out.println("size1 = " + size1);


        System.out.println(map);
    }

map集合遍历方式:

//1.遍历集合
        //keyset方法获取所有键的值,返回set集合
        Set keys = map.keySet();
        //循环set集合得到每一个key
        for (String key : keys) {
            //根据key获取value
            String s = map.get(key);
            System.out.println(  s);
        }
        System.out.println("-------------");



        //2.entrySet遍历集合(不常用)
        //获取键值对的set集合
        Set> entries = map.entrySet();
        //遍历set集合,在得到每一个键值对
        for (Map.Entry entry : entries) {
            //根据
            String key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+":"+value);

HashMap集合底层原理:

HashMap底层是哈希表,依赖HashCode和equals方法保证方法的唯一

TreeMap底层原理:


TreeMap底层是红黑树,依赖自然排序和比较器进行排序,对键进行排序

你可能感兴趣的:(java-ee,java,容器)