集合基础知识

集合与数组区别:

        1、集合长度是可变的,当存储的长度超过集合长度的时候,集合会自动扩容,数组长度不可变

        2、集合不能存储基本数据类型,如果想要存储基本数据类型则需要使用基本数据类型的包装类,数组可以存储基本数据类型

单列集合:collection 双列集合:map

list可重复 set不可重复

个人理解:可以重复意味着集合存储的时候不是根据存入的数值作为位置进行存放的,是按照顺序存放的 所以arraylist 按照下标,linkedList 按照链表

不可重复意味着存储位置是根据存入的值来判断的 值如果相同则存放在相同位置,替换之前的值

所以hashset 按照hash值存储 treeSet 二叉树存储,hashMap ,treeMap 同理

迭代器:Iterator 遍历使用

先看集合普通遍历删除遇到的问题

public static void main(String[] args) {
        List<String> collection = new ArrayList<>();
        collection.add("1");
        collection.add("2");
        collection.add("2");
        collection.add("2");
       for (int i = 0 ; i < collection.size() ; i ++){
           if("2".equals(collection.get(i))){
               collection.remove(i);
             
           }
       }
        System.out.println(collection);
    }

结果为[1, 2] 出现这个问题的原因是当使用数组删除某个元素后该元素后面的元素会角标会-1 如果是在循环中删除 会导致被删除的元素后面的一个元素被忽略 ,解决这个问题的方法是在符合条件删除后 循环脚本i -1,或者使用迭代器删除,迭代器删除的原理跟循环后-1 是类似的

迭代器的方法:hasNext()  next()  remove()

增强for循环:只有实现Iterable 才可以使用增强for循环,Iterator

List 集合:本质 是一个数组

数据结构:栈 队列 数组 链表

栈:先进后出

队列:先进先出

数组:查询速度快增删慢

链表:增删快 查询慢

linkedList 底层是一个双向链表

泛型:规范数据转换问题,避免强转,将运行时期的问题转移到编译时期

泛型可以在 类 方法 接口中使用

通配符 可以标志一个范围 如 ? extends Number  ?标识 使用Number 或者其子类

? super Number ?标识使用Number的父类

set集合:不可以重复,hashSet treeSet

特点:去重、存取顺序不一致,没有索引方法,不能使用for循环遍历

HashSet :本质是一个HashMap

TreeSet: 想要使用treeSet 需要指定排序规则

compareTo 返回负数 则存入的值为较小的值 放在左边,如果返回为0 则标识重复了不需要存储,返回正数则放在右边

TreeSet 两种比较器 对比:1、存储对象实现Comparable接口(自然排序)

2、创建Comparator 实现类 ,在创建treeSet的时候调用带有比较器实现类的treeSet构造器创建treeSet

在使用过程中 优先使用使用第一种,第一种不能使用再使用第二中使用方式

二叉树:

二叉查找树,二叉排序树、二叉搜索树:1、每个节点最多有两个子节点

2、每个节点的左子节点 都是小于自己的

3、每个节点的右子节点都是大于自己的

红黑树:特点:

1、每个节点是红色或者黑色

2、根节点是黑色的

3、每个叶子节点是黑色

4、如果一个节点是红色的,则他的子节点为黑色的

5、从任意节点到叶子节点所包含的黑色节点树相同

6、最长路径长度超过最短路径长度2倍

HashSet:hash值,如果没有重写hashcode的方法,默认使用Object的hashcode方法,根据对象的地址计算出的哈希值

如果重写的hashcode方法,一般通过对象属性计算出来的哈希值,如果不同对象属性一样的那么计算出来的哈希值也是一样的

map循环2中方式:

1、通过先获取key set 然后根据keyset 获取value

2、通过Set<Map.Entry<String,Object>> set = map.entrySet(); 获取到Entry对象 然后 通过entry对象获取key value

Java集合是Java编程中非常重要的一部分,它提供了一种方便的方式来处理一组对象。Java集合框架包括List、Set、Map等接口和实现它们的类。下面是Java集合基础知识的介绍: 1. List接口:List是一个有序的集合,它可以包含重复的元素。List接口的常用实现类有ArrayList和LinkedList。其中,ArrayList是一个动态数组,它可以自动扩容以容纳更多的元素;而LinkedList是一个双向链表,它可以快速地在列表中插入或删除元素。 2. Set接口:Set是一个不允许重复元素的集合。Set接口的常用实现类有HashSet和TreeSet。其中,HashSet是一个基于哈希表的实现,它可以快速地查找元素;而TreeSet是一个基于红黑树的实现,它可以对元素进行排序。 3. Map接口:Map是一个键值对的集合,它允许使用键来查找值。Map接口的常用实现类有HashMap和TreeMap。其中,HashMap是一个基于哈希表的实现,它可以快速地查找键值对;而TreeMap是一个基于红黑树的实现,它可以对键进行排序。 下面是一个示例代码,演示了如何使用ArrayList集合存储学生的成绩,并遍历这个集合: ```java // 创建一个ArrayList集合,向这个集合中存入学生的成绩 ArrayList<Integer> al = new ArrayList<Integer>(); al.add(78); al.add(67); // 对集合遍历 // 方式1 for (Object obj : al) { System.out.println(obj);} // 方式2 for (Integer i : al) { System.out.println(i); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值