java集合框架详解

发布时间 - 2026-01-10 22:23:27    点击率:

1.java集合框架概述

java SE包含了由一组类和接口组成的java集合框架(java Collection Framework,简称JCF),其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合时的编码量。 

集合类中的一些区别,除了它们是否支持重复元素操作外,还包括元素是否有顺序,以及是否允许添加null元素。java集合框架中根据这三个区别,将对象的存储方式分为三种类型,分别是: 

  1. Set(集):对象容器中的对象没有顺序,且不能重复。 
  2. List(列表):对象容器中的对象按照索引顺序排序,而且可以有重复的对象。 
  3. Map(映射):对象容器中的元素包含一对“键对象-值对象”映射,其中键对象不能重复,值对象可以重复。

为支持对象的排序和遍历访问操作,java集合框架中又提供了几个接口: 

  1. 接口SortedSet为Set类型容器提供拍戏功能。  
  2. 接口SortedMap为Map类型容器提供对键对象的排序。 
  3. 接口Comparable和comparator用来实现集合中对象的排序。 

2.Collection接口和Iterator接口

Collection接口中定义了Collection对象共有的一些基本方法

方法  描述
int size() 返回当前集合中包含的元素个数 
isEmpyt() 判断集合中是否含有元素
boolean contains(Objact o) 判断集合中是否含有某一指定元素
add(Objact o) 向集合中添加某一个元素
remove(Objact o) 从集合中删除某一元素
Iterator iterator() 返回一个遍历器,用来访问集合中的各个元素

Iterator接口是一种用于遍历集合的接口。

Iterator接口中的方法
方法 描述
hasNext() 如果集合中还有更多元素,该方法返回true
next() 返回集合中的下一个元素
remove() 删除Iterator返回的最后一个元素

1.List接口 

List接口继承自Collection接口,它有如下特点: 

  1. List中的元素是有顺序的。 
  2. List通常允许重复元素。 
  3. List的实现类通常支持null元素。 
  4. 可以通过索引访问List对象容器中的元素。    

List接口最常用的实现类是ArrayList类和LinkedList类。

1).ArrayList 

程序实例: 

package lei;
  import java.util.ArrayList;
  import java.util.List;
  public class Test {
    public static void main(String[] args) {     
      List list = new ArrayList<>();
      list.add(1);
      list.add("zhangsan");
      list.add(false);
      list.add('a');
      list.add(0, "lisi");
      list.add(1);
      list.remove(1);
      list.remove(2);
      list.set(0, "wangwu");
      for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i));
      }
    }
  }

Object类定义的equals()方法只有在传递给该方法的对象与调用该方法的对象是同一对象的时候,才会返回true。可以通过重写equals()方法来把具有相同状态的两个对象被看做是同一对象。

2).LinkedList 

方法 描述
void addFirst 在链表开头添加一个对象
void addLast 在链表末尾添加一个对象
getFirst() 返回链表中的第一个元素
getLast() 返回链表中的最后一个元素
removeFirst() 删除链表中的第一个元素
removeLast() 删除链表中的最后一个元素

程序实例:

package lei;
  import java.util.LinkedList;
  import java.util.List;
  public class Test2 {
      public static void main(String[] args) {
       LinkedList l=new LinkedList<>();
      l.add("zhangsan");
      l.add("lisi");
      l.addFirst(1);
      l.addLast(4);
      System.out.println(l.getFirst());
      System.out.println(l.getLast());
      l.removeFirst();
      l.removeLast();
      for (int i = 0; i < l.size(); i++) {
        System.out.println(l.get(i));  
      }  
    }
  }

LinkedList与ArrayList的选择

如果列表需要快速存取,但不经常进行元素的插入和删除操作,那么选择ArrayList会好一些;如果需要对;列表进行频繁的插入和删除操作,那么就应该选择LinkedList。

2.set接口 

set接口继承自Collectiion接口,同时也继承了Collection接口的全部方法。set接口有以下特点:

  1. Set类型容器中不能包含重复元素。当加入一个元素到容器中时,要比较元素的内容是否存在重复的,所以加入Set类型对象容器的对象必须重写equals()方法。 
  2. 元素能能有顺序,也可能没有顺序。 
  3. 因为元素可能没有顺序,所以不能基于下标访问Set中费元素。 

实现Set接口最常用的是HashSet类和TreeSet类。

1).Hashset

Hashset类是基于哈希算法的Set接口实现,它主要有如下几个特点: 

  1. 当遍历Hashset时,其中的元素是没有顺序的。 
  2. Hashset中不允许出现重复元素。这里的重复元素是指有相同的哈希码,并且用equals()方法进行比较时,返回true的两个对象。 
  3. 允许包含null元素。

如果我们编写的类重新定义了equals方法,那么这个类也必须重新定义hashCode()方法,并且保证当两个对象用equals方法比较结果为true时,这两个对象的hashCode()方法的返回值相等。 

程序实例:

package lei;
  import java.util.HashSet;
  import java.util.Set;
  public class Test4 {
      public static void main(String[] args) {
      Set<String> set=new HashSet<String>();
      set.add("zhangsan");
      set.add("lisi");
      for(String s:set){
        System.out.println(s);
      }
    }
  }

2).TreeSet

TreeSet类不仅实现类Set接口,还实现了SortedSet接口,从而保证集合中的对象按照一定的顺序排序。当向TreeSet集合中添加一个对象时,会把它插入到有序的对象序列中,但是这种排序并不是按照对象添加的顺序排序,而是按照一定的算法来排序。 

TreeSet使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的Comparator进行排序。TreeSet支持自然排序和自定义排序两种排序方式。

3.Map接口

Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以升级任何引用类型的数据。Key不能重复,但是Value可以重复。

1).HashMap  

HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。 

HashMap类实现了Map接口,从而具有Map接口的所有方法。

package day1228;
  import java.util.*;
  public class HashMapDemo {
    public static void main(String[] args) {
      // 创建一个新的HashMap
      Map<String, String> map = new HashMap<String, String>();
      map.put("a1", "xiao");
      map.put("b2", "xiaol");
      map.put("a4", "xiaosd");
      map.put("b1", "12a");
      map.put("a3", "1");
      // 使用iterator遍历 键和值
      System.out.println("之前的Map值是:");
      Set<String> keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
      // 删除键为"a4"的值
      System.out.println("\n删除键值为a4的元素");
      map.remove("a4");
      // //使用iterator遍历 键和值
      System.out.println("\n之后的Map值:");
      keys = map.keySet();
      for (Iterator<String> i = keys.iterator(); i.hasNext();) {
        String key = i.next();
        String value = map.get(key);
        System.out.println(key + "=" + value);
      }
    }
  }

2).TreeMap

TreeMap类是基于红黑树算法的Map接口实现。TreeMap中键的存放方式与TreeSet相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。 

程序实例:

package day1228;
  import java.util.*;
  public class TreeMapDemo {
    public static void main(String[] args) {
      //创建一个新的TreeMap
      Map<Integer, String> map = new TreeMap<Integer, String>();
      map.put(1, "one");
      map.put(2, "two");
      map.put(3, "three");
      map.put(4, "four");
      map.put(5, "five");
      //使用iterator显示键和值
      System.out.println("之前的map值为:");
      Set<Integer> keys=map.keySet();
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
      //删除键为3的值
      System.out.println("\n删除键值为3的元素");
      map.remove(3);
      //使用iterator显示键和值
      System.out.println("\n之后的值Map为:");
      for(Object key:keys){
        String value=map.get(key);
        System.out.println(key+"="+value);
      }
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# java  # 集合框架  # JAVA集合框架工具类自定义Collections集合方法  # 简单了解java集合框架LinkedList使用方法  # Java集合框架迭代器Iterator实现原理解析  # Java集合框架Collections原理及用法实例  # JAVA集合框架Map特性及实例解析  # 通过实例学习Java集合框架HashSet  # Java集合框架源码分析之LinkedHashMap详解  # Java集合框架LinkedList详解及实例  # Java集合框架中迭代器Iterator解析  # Java集合框架之Collection接口详解  # 一道Java集合框架题 多种解题思路  # Java基础详解之集合框架工具Collections  # 遍历  # 链表  # 的是  # 几个  # 第一个  # 两种  # 可以通过  # 自定义  # 重写  # 创建一个  # 是基于  # 最常用  # 键值  # 实现了  # 是一种  # 放在  # 是有  # 才会  # 是指  # 把它 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用已有域名快速搭建网站?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Laravel如何处理文件下载请求?(Response示例)  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  linux写shell需要注意的问题(必看)  Laravel如何处理异常和错误?(Handler示例)  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  利用vue写todolist单页应用  利用 Google AI 进行 YouTube 视频 SEO 描述优化  高防服务器租用如何选择配置与防御等级?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  JS去除重复并统计数量的实现方法  如何快速生成橙子建站落地页链接?  如何在局域网内绑定自建网站域名?  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  制作公司内部网站有哪些,内网如何建网站?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  BootStrap整体框架之基础布局组件  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用免费手机建站系统零基础打造专业网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何在建站之星绑定自定义域名?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  如何在云服务器上快速搭建个人网站?  IOS倒计时设置UIButton标题title的抖动问题  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  如何生成腾讯云建站专用兑换码?  javascript读取文本节点方法小结  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  🚀拖拽式CMS建站能否实现高效与个性化并存?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Python面向对象测试方法_mock解析【教程】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】