Java基础之集合框架详解

简介: Java基础之集合框架详解

集合是Java中提供的一种容器,可以存储多个数据。


集合和数组之间的差别

    数组的长度是固定的,集合的长度是可变的


    数组中存储的是同一类型的元素,可以存储基本数据类型的值。(可以是对象,可以是基本数据类型)


    集合存储的都是对象,而且对象的类型可以不一致。(只能是对象)


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

它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。


    List 的特点是元素有序、元素可重复。


    Set 的特点是元素无序而且不可重复。


    List 接口的主要实现类有 java.util.ArrayList 和Java.util.LinkedList


    Set 接口的主要实现类有 java.util.HashSet 和 java.util.TreeSet

image.png

Collection接口中常用的方法

image.png

public static void main(String[]args){
  //创建集合对象,使用多态
  Collection<String>coll=newArrayList<>();
  System.out.println(coll);//空
  //add()方法 
  booleanb1=coll.add("小小张自由!");
  coll.add("小张!");coll.add("小小张!");
  coll.add("小小自由!");coll.add("小小张自由!");
  System.out.println(coll);
  //remove()方法
  coll.remove("小小张自由!");//重复值只删除第一个
  System.out.println(coll);
  //contains()方法判断集合中是否包含给定对象
  System.out.println(coll.contains("zyb"));
  System.out.println(coll.contains("小小张自由!"));
  //isEmpty();判断集合是否为空
  System.out.println(coll.isEmpty());
  //size()方法返回集合中元素的个数
  System.out.println(coll.size());
  //toArray()方法把集合中元素存储到数组中
  Object[]objects=coll.toArray();
  for(inti=0;i<objects.length;i++){
  System.out.println(objects[i]);
  }
    //遍历集合
  /*for(inti=0;i<coll.size();i++){
  System.out.println(coll[i]);
  }*/
  //清空
  coll.clear();
  System.out.println(coll);
}

List接口中常用的方法

public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。

public E get(int index):返回集合中指定位置的元素。

public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。

public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。


ArrayList集合

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


LinkedList集合

java.util.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。

private static void show01(){
  LinkedList<String>LinkedList=newLinkedList<String>();
  LinkedList.add("a");LinkedList.add("b");
  LinkedList.add("c");LinkedList.add("d");
  System.out.println("原始数组"+LinkedList);
  System.out.println(LinkedList.removeFirst());//移除第一个与pop()效果一样
  System.out.println(LinkedList.removeLast());
  LinkedList.addFirst("Java");//开头与push()效果一样
  LinkedList.addLast("promsing");//结尾与add()效果一样
  System.out.println(LinkedList);
  System.out.println(LinkedList.getFirst());//获取第一个
  System.out.println(LinkedList.getLast());//获取最后一个
}

set接口

java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了。


HashSet集合

java.util.HashSet 是 Set 接口的一个实现类, 它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。 java.util.HashSet 底层的实现其实是一个 java.util.HashMap 支持,

public class HashSetDemo { 
    public static void main(String[] args) { 
        //创建 Set集合
        HashSet<String> set = new HashSet<String>(); 
        //添加元素 
        set.add(new String("cba")); 
        set.add("abc"); 
        set.add("bac"); 
        set.add("cba"); 
        //遍历 
        for (String name : set) { 
            System.out.print(name); 
        } 
    } 
}
//输出结果为 cba  abc  bac

LinkedHashSet集合

HashSet 保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序就要用到LinkedHashSet集合。 它是链表和哈希表组合的一个数据存储结构。

public class LinkedHashSetDemo { 
    public static void main(String[] args) { 
        Set<String> set = new LinkedHashSet<String>(); 
        set.add("bbb"); 
        set.add("aaa"); 
        set.add("abc"); 
        set.add("bbc"); 
        Iterator<String> it = set.iterator(); 
        while (it.hasNext()) { 
            System.out.print(it.next()); 
        } 
    } 
}
//输出结果为 bbb   aaa  abc  bbc


Collections:集合工具类

public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加一些元素。

public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。

public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。

public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。
public static void main (String[] args){
  ArrayList<String> list = new ArrayList<>();
  Collections.addAll(list,"a","b","c","d","e");//批量添加多个e
  System.out.println(list);
  Collections.shuffle(list);//打乱
  System.out.println(list);
}

双列集合Map

Map接口中常用的方法

image.png

public static void main(String[] args) { 
    //创建 map对象 
    HashMap<String, String> map = new HashMap<String, String>(); 
    //添加元素到集合 
    map.put("黄晓明", "杨颖"); 
    map.put("文章", "马伊琍"); 
    map.put("邓超", "孙俪"); 
    System.out.println(map); 
    //String remove(String key) 
    System.out.println(map.remove("邓超")); 
    System.out.println(map); 
    // 想要查看 黄晓明的媳妇 是谁 
    System.out.println(map.get("黄晓明")); 
    System.out.println(map.get("邓超")); 
}

Map集合的两种遍历方式

一、使用set方法 通过键找值的方式

public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("郭靖",175);
        map.put("杨过",180);
        map.put("乔峰",183);
        map.put("无忌",177);
        //1、使用Map集合中的方法keySet()方法,把Map集合中所有的key取出来,存储到set集合中
        Set<String> set=map.keySet();
        //2、遍历set集合,获取Map集合中的每一个key
        //使用迭代器遍历set集合
        Iterator<String>iterator=set.iterator();
        while(iterator.hasNext()){
            String key=iterator.next();
            //3、通过Map集合中的方法get(),通过Key找到value
            Integer integer=map.get(key);//根据指定的键,找到对应的值
            System.out.println(key+","+integer);
        }
        System.out.println("增强For循环========");
        for(String key:set){
            Integer integer=map.get(key);//根据指定的键,找到对应的值
            System.out.println(key+","+integer);
        }
    }

二、使用Entry对象遍历map集合

public static void main(String[] args) {
        Map<String,Integer> map=new HashMap<>();
        map.put("郭靖",175);
        map.put("杨过",180);
        map.put("乔峰",183);
        map.put("无忌",177);
        //一、使用Map集合中的entrySet()方法,把Map集合中多个entry对象取出来,存储到Set集合中
        Set<Map.Entry<String,Integer>>set=map.entrySet();
        //二、遍历Set集合,获取每一个entry对象
        Iterator<Map.Entry<String,Integer>>iterator=set.iterator();
        while(iterator.hasNext()){
            Map.Entry<String,Integer>entry=iterator.next();
            String key=entry.getKey();
            Integer value=entry.getValue();
            System.out.println(key+","+value);
        }
        System.out.println("增强For循环==============");
        for(Map.Entry<String,Integer>entry:set){
        }
    }

LinkedHashMap:存储有序-它是链表和哈希表组合的一个数据存储结构。

public class LinkedHashMapDemo { 
        public static void main(String[] args) { 
            LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(); 
            map.put("邓超", "孙俪"); 
            map.put("李晨", "范冰冰"); 
            map.put("刘德华", "朱丽倩"); 
            Set<Entry<String, String>> entrySet = map.entrySet(); 
            for (Entry<String, String> entry : entrySet) { 
                System.out.println(entry.getKey() + " " + entry.getValue()); 
            }
        } 
    }
相关文章
|
1月前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
1月前
|
算法 Java 数据处理
Java集合框架的优缺点
Java集合框架的优缺点
|
2天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
2天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
2天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
3天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
16 0
|
7天前
|
Java Maven 开发工具
《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)
《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)
28 1
|
12天前
|
Java 大数据 云计算
Spring框架:Java后台开发的核心
【4月更文挑战第15天】Spring框架在Java后台开发中占据核心位置,因其控制反转(IoC)、面向切面编程(AOP)、事务管理等特性提升效率和质量。Spring提供数据访问集成、RESTful Web服务和WebSocket支持。优势包括高效开发、灵活扩展、强大生态圈和广泛应用。应用于企业级应用、微服务架构及云计算大数据场景。掌握Spring对Java开发者至关重要。
|
14天前
|
存储 Java 编译器
Java集合丛林:深入了解集合框架的秘密
Java集合丛林:深入了解集合框架的秘密
16 0
Java集合丛林:深入了解集合框架的秘密
|
17天前
|
Java BI
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)