首页 > 编程语言 >Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:集合迭代器

Java集合:Collection and Map;ArrayList;LinkList;HashSet;TreeSet;HashMap;TreeMap;Iterator:集合迭代器

时间:2024-08-06 11:54:04浏览次数:27  
标签:Map set Java map 元素 list add 集合

        集合介绍:

                        是一组变量类型(容器),跟数组很像。

一,引用集合的原因(必要性):

                    A:数组的空间长度固定,一旦确定不可以更改。多了浪费,少了报错。
                    B:使用数组操作数据时,效率较低。
                   C:无法获得数组中存储的真实元素个数。
                   D:数组增加删除元素效率低。
                   F:数组没办法满足,无序,不可重复的数据。

二,集合分类:

           Collection:  

                                

            map : 

三,集合常用实现类介绍:

1,ArraryList:


                 没有自己特有方法(只有父类方法)
         
                 ArraryList:底层源码是数组: 数组空间大小初始值默认是10;当初始空间满后,以1.5倍的空间大小扩增。(变成新数组,新数组是旧数组的1.5倍。)
                                                                                                                                                                        优势:随机访问和遍历的效率高(因为下标);
                                                                                                                                                                        缺点: 增加和删除效率较低。


   介绍:Vetor(老版本集合:) 

2, LinkList:

                        底层是Linked链表结构。       

                                   优势:擅长做删除和增加操作。内存使用率比较高。    
                                   缺点:随机访问和遍历的效率低;

3, hashSet:
       


                    存储无序唯一元素

                   底层实现是Hash表
                   hashSet的去重原理:

                                         (比较传入对象的属性是否相同) 借助当前元素对象的两个方法:HashCode(),Equals():(重写)首先获得要存入元素的hash值,通过传入的hash值依次比较已有的元素的hash值,如果hash值不同,直接将元素存入集合。 如果hash值相同,再使用equals()进行两个hash值相同的对象的属性比较。如果属性都相同,拒绝存入集合,如果属性不相同,存入集合。
                  所以想使用HashSet,要对equals和hashCode重写。符合去重原理。

   4,TreeSet:                         

                         存储有序唯一元素。(有序,不是指先进先出的顺序,指根据某个规则进行排序,正序,倒序 a对应97)
                      介绍treeSet的去重排序原理:

                                                   利用比较器对象的比较方法,将要存入的元素与想要存入的元素依次比较如果比较结果为认为是形同元素,如果结果为1,认为是不同元素,且存入比较元素的前方。如果比较结果为-1,认为是不同元素,且结果靠后。


   5,HashMap:

                        HashMap:是Java中最常用的实现了 Map 接口的类之一,它提供了基于键值对存储和快速访问数据的功能。

                        特点:
                                键值对存储:HashMap 存储数据以键值对的形式,其中键唯一,值可以重复或为 null。

                                 无序性:HashMap 不保证键值对的顺序,即不按照任何特定顺序来迭代元素。

                                允许 null 键和 null 值:HashMap 中可以存储 null 值,也可以有一个 null 键。

                                高效的插入和查找操作:HashMap 基于哈希表实现,插入和查找操作的平均时间复杂度为 O(1),假设哈希函数良好且负载因子适中。

                                 非线程安全:HashMap 不是线程安全的,如果需要在多线程环境中使用,可以考虑使用 ConcurrentHashMap

                      比较HashTable和HashMap: 

6,TreeMap:

                                TreeMap 是 Java 中实现了 SortedMap 接口的类,它基于红黑树(Red-Black tree)实现,用于存储键值对,并且能够根据键进行排序。

                                特点:
                                        有序性:TreeMap 中的键值对是按照键的自然顺序或者通过构造函数提供的 Comparator 进行排序的。默认情况下,键按升序排序。

                                        非线程安全:与 HashMap 类似,TreeMap 也不是线程安全的。如果需要在多线程环境中使用,可以考虑使用 ConcurrentSkipListMap。

                                        不允许 null 键:TreeMap 不允许 null 键,因为它依赖于键的比较或排序。

                                        基于红黑树:TreeMap 的实现基于红黑树数据结构,这种树结构保证了在最坏情况下的时间复杂度为 O(log n),其中 n 是 TreeMap 中的键值对数量。

                                        支持范围查询:TreeMap 提供了一些方法,如 headMap(), tailMap(), subMap(),允许根据键的范围获取子映射。

四,集合中的方法

         1,集合共有方法     

                

 size()


size() 方法返回集合中元素的数量。

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");

int size = list.size(); // size 等于 3
System.out.println("List size: " + size);


isEmpty()


isEmpty() 方法判断集合是否为空。

Set<Integer> set = new HashSet<>();
boolean empty = set.isEmpty(); // empty 等于 true,因为集合是空的

List<String> nonEmptyList = new ArrayList<>();
boolean notEmpty = nonEmptyList.isEmpty(); // notEmpty 等于 false,因为列表不为空


contains(Object obj)


contains(Object obj) 方法判断集合是否包含指定元素。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");

boolean containsApple = set.contains("apple"); // containsApple 等于 true
boolean containsOrange = set.contains("orange"); // containsOrange 等于 false


clear()


clear() 方法清空集合中的所有元素。


List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

System.out.println("Before clear: " + numbers); // 输出 [1, 2, 3]

numbers.clear(); // 清空列表

System.out.println("After clear: " + numbers); // 输出 []


addAll(Collection  c)


addAll(Collection c) 方法将另一个集合的所有元素添加到当前集合中。


List<String> list1 = new ArrayList<>();
list1.add("apple");
list1.add("banana");

List<String> list2 = new ArrayList<>();
list2.add("cherry");
list2.add("date");

list1.addAll(list2); // 将 list2 的所有元素添加到 list1 中

System.out.println("Combined list: " + list1); // 输出 [apple, banana, cherry, date]

  2,list特有的方法 : 

                        注:   list的实现类ArrayList 和LinkedList具有list和集合共有的方法。              

创建List:

List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("cherry");


访问元素:


String fruit = list.get(0); // 获取第一个元素

String fruit = list.get(1); // 获取第二个元素


添加元素:

list.add("date"); // 将元素添加到列表末尾


删除元素:

list.remove("banana"); // 删除指定元素

3,set特有的方法

                注:HashSet和MapSet具有set和集合共有的方法。

创建Set:

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("cherry");


添加元素:


set.add("date");


删除元素:


set.remove("banana");

4,map特有的方法:

创建Map:

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);


访问元素:

int value = map.get("apple"); // 获取键为"apple"的值


添加或修改元素:


map.put("date", 4);


删除元素:

map.remove("banana");

四,遍历集合:

1遍历Collection型集合:

public class Test02 {
    //这是main方法,程序的入口
    public static void main(String[] args) {
        Collection col = new ArrayList();
        col.add(18);
        col.add(12);
        col.add(11);
        col.add(17);
        col.add("abc");
        col.add(9.8);
        //对集合遍历(对集合中元素进行查看)
        //方式1:普通for循环
        /*for(int i= 0;i<col.size();i++){
            col.
        }*/
        //方式2:增强for循环
        for(Object o:col){
            System.out.println(o);
        }
        System.out.println("------------------------");
        //方式3:iterator()
        Iterator it = col.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

2,遍历MAp集合:

//第一种
        Collection<Sutdent> values = map.values();
        Iterator<Sutdent> iterator2= values.iterator();
        while(iterator2.hasNext())
        {
            Sutdent stu=iterator2.next();
            System.out.println(stu);
        }
        //第二种,汇总key值
        Set<Integer> integers = map.keySet();
        Iterator<Integer> iterator1=integers.iterator();
        while(iterator1.hasNext()){
        Integer key=iterator1.next();
        Sutdent stu=map.get(key);
        System.out.println(stu);

    }
        //第三种
        Set<Map.Entry<Integer, Sutdent>> entries = map.entrySet();//汇总键值对Entry:汇总捆绑值。
        Iterator<Map.Entry<Integer, Sutdent>> iterator3 = entries.iterator();
        while (iterator3.hasNext()){
            Map.Entry<Integer, Sutdent> next = iterator3.next();
            Sutdent stu=next.getValue();
            System.out.println(stu);
        }
        //第四种
        Collection<Sutdent> values1 = map.values();
        for (Sutdent stu   :  values1){
            System.out.println(stu);
            /**
             * 增强性for循环,可以在不知道下标的情况下,遍历集合和数组
             * 普通下标,必须知道下标
             * for(集合/数组中元素类型  代号  :想要遍历的数组/集合){
             *                    操作代号;
             *                       }
             */
        }
    }

                                                                                                                       
                                    

                        

标签:Map,set,Java,map,元素,list,add,集合
From: https://blog.csdn.net/weixin_72637723/article/details/140933772

相关文章

  • MapperScannerConfigurer中获取applicayion.yml配置,进行动态加载BasePackage
     由于在MapperScannerConfigurer的bean优先于@value,导致@value取出来的时候都是null,所以只能使用Environment来获取值importorg.mybatis.spring.mapper.MapperScannerConfigurer;importorg.springframework.beans.factory.annotation.Value;importorg.springframework......
  • 集合泛型,集合遍历,集合工具类
    集合泛型,集合遍历,集合工具类一.集合泛型在Java中,集合泛型(CollectionGenerics)是Java泛型(Generics)在集合框架(CollectionsFramework)中的一个重要应用。泛型提供了一种编译时类型安全检测机制,允许程序员在编译时期而不是运行时检查非法的类型。当将泛型应用于集合时,可以指定集合......
  • 集合泛型
    Java集合框架中的泛型是Java5引入的一个特性,它允许开发者在编译时就确定集合中元素的类型,从而避免类型转换和潜在的类型安全问题。以下是一些常用的Java集合类和它们使用泛型的例子:ArrayList-动态数组,提供快速随机访问。ArrayList<String>list=newArrayList<>();......
  • 集合
    集合1.集合框架类结构图2.List接口Java中的List接口是Java集合框架(JavaCollectionsFramework)的一部分,它继承自Collection接口。List接口用于表示一个有序的集合,它可以包含重复的元素。与Set接口不同,List保留了元素的插入顺序,并且允许通过索引访问元素。主要特点有序:元素......
  • kotlin 与java 接口不兼容@FunctionalInterface
    需求:获取当前方法名为了获取当前方法名已知的有1.堆栈获取2.通过classs的enclosingMethod.name比较准确的是enclosingMethod,但是为了获取这个还需要一个内部类,于是用到了Runable,但是run方法没有返回值于是出现了神奇问题1.照Runnable抄一份:源码如下:@FunctionalInterfacepu......
  • javax.validation包校验嵌套属性(List对象)的写法
    1maven依赖<!--HibernateValidator用于数据验证--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></depende......
  • List,Set,Queue,Map接口
    List,Set,Queue,Map接口一.List接口List接口是Java集合框架中的一个重要接口,它继承自Collection接口。List接口表示一个有序的集合,其中的元素可以重复。这意味着在List中,每个元素都有一个特定的索引位置,我们可以通过这个索引来访问或操作元素。List接口的主要特点包括......
  • 集合遍历
    集合遍历目录集合遍历传统的for循环遍历,基于计数器的:迭代器遍历,Iterator:foreach循环遍历:Stream流处理传统的for循环遍历,基于计数器的:​遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素......
  • 集合工具类
    集合工具类目录集合工具类java.until.Collections类java.util.Arrays类java.util.Properties类java.until.Collections类概念java.util.Collections是集合工具类,用来对集合进行操作常用方法staticvoidshuffle(List<?>list)//打乱集合中元素顺序sort(List<T>list)......
  • JavaScript 中的“this”几种不同含义
    在JavaScript中,“ this ”指的是当前正在执行代码的对象。其值由函数的调用方式动态确定,这意味着它可以根据上下文而变化。1.全球背景在全局上下文中(即任何函数或对象之外),“ this”指的是全局对象。在浏览器中,“ this”是窗口对象,而在Node.js中,它是全局对象。2.对象......