IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java 集合详解 -> 正文阅读

[Java知识库]Java 集合详解

目录

一、概述

二、集合是什么?

三、Collection/集合

?四、ArrayList/数组列表

五、Iterator/迭代器

六、Set/无序集合/集?

七、HashSet/散列集

八、LinkedHashSet

九、TreeSet/树集

十、List/列表?

十一、?Map????????????????


一、概述

所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。

Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

二、集合是什么?

  Java集合类存放于 java.util 包中,是一个用来存放对象的容器。

注意:

  1. 集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。
  2. 集合存放的是多个对象的引用,对象本身还是放在堆内存中。
  3. 集合可以存放不同类型,不限数量的数据类型。

三、Collection<E>/集合

Collection与Collections

  • Collection是所有集合类的根接口;
  • Collections是提供集合操作的工具类;

集合类和数组不同,

  • 数组元素可以为基本数据类型值/对象引用;
  • 集合元素只能为对象引用;

Java的集合类由Collection接口和Map接口派生,

  • Set代表无序集合,无序不可重复;
  • List代表有序集合,有序可重复;
  • Map集合存储键值对

?ArrayList<E>/数组列表

ArrayList底层有数组支持,通常作为默认首选;当程序频繁进行插入/删除操作时,选用LinkedLIst;如果元素数量固定,可选择真正数组/List/备选;

 //我们这里将 ArrayList集合作为 Collection 的实现类
 2         Collection collection = new ArrayList();
 3         
 4         //添加元素
 5         collection.add("Tom");
 6         collection.add("Bob");
 7         
 8         //删除指定元素
 9         collection.remove("Tom");
10         
11         //删除所有元素
12         Collection c = new ArrayList();
13         c.add("Bob");
14         collection.removeAll(c);
15         
16         //检测是否存在某个元素
17         collection.contains("Tom");
18         
19         //判断是否为空
20         collection.isEmpty();
21         
22         //利用增强for循环遍历集合
23         for(Object obj : collection){
24             System.out.println(obj);
25         }
26         //利用迭代器 Iterator
27         Iterator iterator = collection.iterator();
28         while(iterator.hasNext()){
29             Object obj = iterator.next();
30             System.out.println(obj);
31         }

Iterator<E>/迭代器

Collection 接口的 iterator() 方法返回一个 Iterator。?

public interface Iterable<E> {  // Iterable泛型接口
   Iterator<E> iterator();      // 由继承接口的集合类负责实现,返回一个迭代器
}
  1. 使用方法 iterator() 要求容器返回一个Iterator .第一次调用Iterator 的next() 方法时,它返回集合序列的第一个元素。
  2. 使用next() 获得集合序列的中的下一个元素。
  3. 使用hasNext()检查序列中是否元素。
  4. 使用remove()将迭代器新返回的元素删除

Set<E>/无序集合/集?

Set集合中对象不可重复,因此当试图添加两个相同元素时,add()方法返回false/元素不可加入;

Set集合中对象必须重写hashCode()方法和equals()方法;

?Set最大的特性就是不允许在其中存放的元素是重复的

?

Set set1 = new  HashSet();
        if(set1.add("a"))
        {
            System.out.println("OK");
        }
        if (set1.add("a")) {
            System.out.println("OK2");
        }
        else
        {
            System.out.println("BAD2");
        }
        set1.add("000");
        set1.add("111");
        set1.add("222");
        System.out.println("集合set1的内容:"+set1);
        System.out.println("集合set1的大小:"+set1.size());
        set1.remove("000");
        System.out.println("集合set1的内容:"+set1);
        System.out.println("集合set1中是否包含000 :"+set1.contains("000"));
        System.out.println("集合set1中是否包含111 :"+set1.contains("111"));
        Set set2=new HashSet();
        set2.add("111");
        set2.addAll(set1);//将set1 集合中的元素全部都加到set2中
        System.out.println("集合set2的内容:"+set2);
        Iterator iterator = set1.iterator();//得到一个迭代器
        while (iterator.hasNext()) {//遍历
            String element =(String) iterator.next();
            System.out.println("iterator = " + element);
        }
        //将集合set1转化为数组
        Object s[]= set1.toArray();
        for(int i=0;i<s.length;i++){
            System.out.println(s[i]);
        }

HashSet<E>/散列集

  • 添加元素时,调用hashCode()方法计算对象的hashCode值;
  • 根据hashCode值决定对象的存储位置—>元素存储顺序和添加顺序可能不一致(LinkedHashSet可保证);
  • HashSet判断元素相等的标准:equal()方法相等/hashCode()方法返回值相同;
  • Hash算法/哈希/散列:通过计算元素的hashCode值获取元素的存储位置—>价值在于存取/查找速度快
  • 与数组相比,HashSet索引不需要连续,可自由增加HashSet长度;

Set set1 = new HashSet();
        Set set2 = new LinkedHashSet();
        for(int i =0 ; i<5 ;i++)
        {
            int s = (int)(Math.random()*100);
            set1.add(new Integer(s));
            set2.add(new Integer(s));
            System.out.println("第 "+i+" 次随机数产生为:"+s);
        }
         System.out.println("未排序前HashSet:"+set1);
         System.out.println("未排序前LinkedHashSet:"+set2);
         //使用TreeSet来对另外的Set进行重构和排序
         Set sortedSet = new TreeSet(set1);
         System.out.println("排序后 TreeSet :"+sortedSet);

LinkedHashSet<E>

HashSet的子类,LinkedHashSet也是根据元素的hashCode值决定其存储位置;

同时使用链表维护元素的添加次序—>性能略低于HashSet的性能;

TreeSet<E>/树集

TreeSet实现SortSet接口,

TreeSet采用红黑树(red-black tree)存储集合元素,排序规则支持自然排序/定制排序;

TreeSet存储对象必须实现Comparable接口

List<E>/列表?

Java中所有链表底层都是双向链接(doubly linked);

List额外提供listIterator()方法,该方法返回一个ListIterator对象,用于遍历List;

ListIterator的set(obj)方法用新元素obj覆盖next()/previous()返回的上一个元素,可以双向移动;

方法:

  • void add(int index, Object element) :添加对象element到位置index上
  • boolean addAll(int index, Collection collection) :在index位置后添加容器collection中所有的元素
  • Object get(int index) :取出下标为index的位置的元素
  • int indexOf(Object element) :查找对象element 在List中第一次出现的位置
  • int lastIndexOf(Object element) :查找对象element 在List中最后出现的位置
  • Object remove(int index) :删除index位置上的元素
  • Object set(int index, Object element) :将index位置上的对象替换为element 并返回老的元素。

?Map????????????????

数学中的映射关系在Java中就是通过Map来实现的。它表示,里面存储的元素是一个对(pair),我们通过一个对象,可以在这个映射关系中找到另外一个和这个对象相关的东西。?

  • KeySet()遍历实质:遍历两次,第一次转为Iterator对象,第二次从Map中去除key对应的value;
  • entrySet()遍历实质:只遍历一次就把K,V放入entry中,效率较KeySet()更高;

?

HashMap<String, String> hm = new HashMap<String, String>();
        //试图将2个key为null的key-value对放入HashMap中
        hm.put(null , null);
        hm.put(null , null);
        //将一个value为null的key-value对放入HashMap中
        hm.put("a" , null);
        hm.put("a" , "b");
        //输出Map对象
        System.out.println(hm);

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-06-06 17:11:36  更:2022-06-06 17:13:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:12:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码