Java集合框架初步认识

本文深入讲解Java集合框架,包括Collection和Map接口,以及其主要实现类如ArrayList、HashSet、HashMap等。探讨了集合的遍历方法,对比了HashMap与HashTable的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 集合框架

一:集合类简介

Java集合就像一种容器,可以把多个对象(实际上是对象的引用)“丢进”该容器中。从Java 5增加了泛型以后,Java集合可以记住容器中对象的数据类型,使得编码更加简洁、健壮。所有集合类都位java.util包下,但支持多线程的集合类位于java.util.concurrent包下。

如图(图片从别的博文摘取,谢谢您的精心绘制)(图片含义:黄色:接口,绿色:抽象接口,蓝色:实现类):
在这里插入图片描述在这里插入图片描述

如图可以看出:java集合框架主要包含两种类型的容器,一种是集合(collection),存储一个元素的集合。一种是图(map),存储键值对映射。collection集合有3种子类型(List,Queue,Set),再往下是抽象类,最后实现类,常用的有:ArrayList,LinkedArrayList,HashSet,LinkedHashSet,HashMap,LinkedHashMap
集合框架是一个用来代表和操纵集合的同一款框架,所有集合框架包含如下内容:
1 接口 :代表集合的抽象数据类型,如collection,list,set,map,定义为接口,方便以不同的方式操作集合对象。
2 实现类:集合接口的具体实现,是可重复使用的数据结构。如Arraylist,linedlist,hashmap,hashset。
3 算法: 实现集合接口对象中的算法。如搜索排序,这些算法多为多态,在相似的接口上有着不同的实现。

二 java集合常见接口及实现类

1 collections接口常见方法(来源于java API)

在这里插入图片描述
1) collections实现接口及子类
集合的顶级接口collections
下面主要有三个接口,分别是:list,set,queue。

① list 的主要实现类:arraylist,linkedlist,vector
       特点:有序,有下标,可重复。
       ArrayList底层通过数组实现,LikedList底层通过链表实现。
② set的主要实现类:HashSet,LinkedHashSet,TreeSet
	 特点:无序(LinkedHashSet除外),无下标,不可重复
	 HashSet底层通过哈希表实现,LinkedHashSet底层通过哈希表+链表实现(链式哈希级)Treeset底层
	 通过树结构实现
③ Queue(队列Queue是一个队列集合,队列通常是指“先进先出”(FIFO)的容器。新元素插入(offer)到队列
的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。
		主要实现类:ArrayDeque、LinkedList、PriorityQueue。

三 Map集合

Map接口采用键值对Map<K,V>的存储方式,保存具有映射关系的数据,因此,Map集合里保存两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value可以是任意引用类型的数据。key值不允许重复,可以为null。如果添加key-value对时Map中已经有重复的key,则新添加的value会覆盖该key原来对应的value。常用实现类有HashMap、LinkedHashMap、TreeMap等。

Map常见方法(来源于API)如下:
在这里插入图片描述

1)HashMap和HashTable
HashMap与Hashtable是Map接口的两个典型实现,它们之间的关系完全类似于ArrayList与Vertor。HashTable是一个古老的Map实现类,它提供的方法比较繁琐,目前基本不用了。

区别:1 HashMap是线程不安全,HashTable是线程安全的。
     2 HashMap可以使用null值最为key或value;Hashtable不允许使用null值作为key和value,如果把
     null放进HashTable中,将会发生空指针异常。

四遍历集合中的数据

1 遍历ArrayList


import java.util.*;
 
public class Test{
 public static void main(String[] args) {
     List<String> list=new ArrayList<String>();
     list.add("Hello");
     list.add("World");
     list.add("HAHAHAHA");
     //第一种遍历方法使用 For-Each 遍历 List
     for (String str : list) {            //也可以改写 for(int i=0;i<list.size();i++) 这种形式
        System.out.println(str);
     }
 
     //第二种遍历,把链表变为数组相关的内容进行遍历
     String[] strArray=new String[list.size()];
     list.toArray(strArray);
     for(int i=0;i<strArray.length;i++) //这里也可以改写为  for(String str:strArray) 这种形式
     {
        System.out.println(strArray[i]);
     }
     
    //第三种遍历 使用迭代器进行相关遍历
     
     Iterator<String> ite=list.iterator();
     while(ite.hasNext())//判断下一个元素之后有值
     {
         System.out.println(ite.next());
     }
 }
}

2 遍历Map


import java.util.*;
 
public class Test{
     public static void main(String[] args) {
      Map<String, String> map = new HashMap<String, String>();
      map.put("1", "value1");
      map.put("2", "value2");
      map.put("3", "value3");
      
      //第一种:普遍使用,二次取值
      System.out.println("通过Map.keySet遍历key和value:");
      for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }
      
      //第二种
      System.out.println("通过Map.entrySet使用iterator遍历key和value:");
      Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
      while (it.hasNext()) {
       Map.Entry<String, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
      
      //第三种:推荐,尤其是容量大时
      System.out.println("通过Map.entrySet遍历key和value");
      for (Map.Entry<String, String> entry : map.entrySet()) {
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
      }
    
      //第四种
      System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
      for (String v : map.values()) {
       System.out.println("value= " + v);
      }
     }
}

参考
1 https://blog.csdn.net/wangwei_620/article/details/82049502
2 https://www.cnblogs.com/dxflqm/p/11867611.html
3 https://www.runoob.com/java/java-collections.html
4 https://www.cnblogs.com/bingyimeiling/p/10255037.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值