网站建设构架,服务器ip做网站,sem搜索,江苏做电缆桥架的公司网站Java基础之集合类 一、集合的框架1.1、集合概述1.2、集合与数组区别1.3、数组的缺点#xff1a;1.4、常用集合分类1.5、Collection常用方法 二、List集合2.1、ArrayList2.2、LinkedList2.3、Vector2.4、区别 三、Set集合3.1、HashSet集合3.2、LinkedHashSet集合3.3、TreeSet集… Java基础之集合类 一、集合的框架1.1、集合概述1.2、集合与数组区别1.3、数组的缺点1.4、常用集合分类1.5、Collection常用方法 二、List集合2.1、ArrayList2.2、LinkedList2.3、Vector2.4、区别 三、Set集合3.1、HashSet集合3.2、LinkedHashSet集合3.3、TreeSet集合 四、Map集合4.1、HashMap4.2、TreeMap4.3、HashTable 一、集合的框架
1.1、集合概述
所有的集合类和集合接口都在java.util包下。在内存中申请一块空间用来存储数据在Java中集合就是替换掉定长的数组的一种引用数据类型。
1.2、集合与数组区别
区别集合数组长度大小可以变用多少空间拿多少空间。长度固定定义长了造成内存空间的浪费定义短了不够用。内容能存储引用数据类型存储的为对象的内存地址存储基本数据类型和引用数据类型元素可以存储不同类型数据一般情况下也只存储同一种类型的数据只能存储同一种类型成员
1.3、数组的缺点
数组一旦初始化长度、类型就不能再改变了只能按照初始化的数据类型和长度进行存储数据了。数组中提供的方法比较有限对于数据的增删改查操作不方便并且效率也不太高。可以存储重复的值并且有序特点单一。
1.4、常用集合分类 Collection 接口的接口 对象的集合单列集合 ├——-List 接口元素按进入先后有序保存可重复 │—————-├ LinkedList 接口实现类 链表 插入删除 没有同步 线程不安全 │—————-├ ArrayList 接口实现类 数组 随机访问 没有同步 线程不安全 │—————-└ Vector 接口实现类 数组 同步 线程安全 │ ———————-└ Stack 是Vector类的实现类 └——-Set 接口 仅接收一次不可重复并做内部排序 ├—————-└HashSet 使用hash表数组存储元素 │————————└ LinkedHashSet 链表维护元素的插入次序 └ —————-TreeSet 底层实现为二叉树元素排好序
Map 接口 键值对的集合 双列集合 ├———Hashtable 接口实现类 同步 线程安全 ├———HashMap 接口实现类 没有同步 线程不安全- │—————–├ LinkedHashMap 双向链表和哈希表实现 │—————–└ WeakHashMap ├ ——–TreeMap 红黑树对所有的key进行排序 └———IdentifyHashMap 注意 ①List接口用于存储有序的、可重复的数据可以想象成动态的数组 ②Set接口存储无序的、不可重复的数据类似于高中的集合 //Collection源码如下
public interface CollectionE extends IterableE {1.5、Collection常用方法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;public class CollectionExample {public static void main(String[] args) {// 创建一个ArrayListCollectionString stringList new ArrayList();// 添加元素stringList.add(Apple);stringList.add(Banana);stringList.add(Orange);// 获取集合大小int size stringList.size();System.out.println(Size: size);// 判断集合是否为空boolean isEmpty stringList.isEmpty();System.out.println(Is Empty: isEmpty);// 判断集合是否包含元素boolean containsBanana stringList.contains(Banana);System.out.println(Contains Banana: containsBanana);// 删除元素boolean removed stringList.remove(Orange);System.out.println(Removed Orange: removed);// 获取集合迭代器并遍历IteratorString iterator stringList.iterator();while (iterator.hasNext()) {String element iterator.next();System.out.println(Element: element);}// 添加多个元素CollectionString anotherList new ArrayList();anotherList.add(Grapes);anotherList.add(Pineapple);stringList.addAll(anotherList);// 转换为数组Object[] array stringList.toArray();System.out.println(Array: java.util.Arrays.toString(array));// 清空集合stringList.clear();System.out.println(Size after clear: stringList.size());}
}二、List集合
2.1、ArrayList
//ArrayList构造方法
public ArrayList(int initialCapacity)//构造一个具有指定初始容量的空列表。
public ArrayList() //默认构造一个初始容量为10的空列表。
public ArrayList(Collection? extends E c)//构造一个包含指定 collection 的元素的列表代码示例
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ArrayListExample {public static void main(String[] args) {// 创建 ArrayListListString arrayList new ArrayList();// 添加元素arrayList.add(Apple);arrayList.add(Banana);arrayList.add(Orange);// 获取元素String firstElement arrayList.get(0);System.out.println(First Element: firstElement);// 修改元素arrayList.set(1, Grapes);// 删除元素arrayList.remove(Orange);// 获取 ArrayList 大小int size arrayList.size();System.out.println(Size: size);// 判断是否包含某个元素boolean containsBanana arrayList.contains(Banana);System.out.println(Contains Banana: containsBanana);// 遍历 ArrayList使用增强 for 循环System.out.println(Iterating using enhanced for loop:);for (String fruit : arrayList) {System.out.println(fruit);}// 遍历 ArrayList使用迭代器System.out.println(Iterating using Iterator:);IteratorString iterator arrayList.iterator();while (iterator.hasNext()) {String fruit iterator.next();System.out.println(fruit);}// 转换为数组Object[] array arrayList.toArray();System.out.println(Array: java.util.Arrays.toString(array));// 清空 ArrayListarrayList.clear();// 判断是否为空boolean isEmpty arrayList.isEmpty();System.out.println(Is Empty: isEmpty);}
}2.2、LinkedList
LinkedList 是 Java 集合框架中 List 接口的另一个实现基于链表实现。相比于 ArrayListLinkedList 在插入和删除元素的操作上更为高效但在随机访问方面较慢。
代码示例
import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;public class LinkedListExample {public static void main(String[] args) {// 创建 LinkedListListString linkedList new LinkedList();// 添加元素linkedList.add(Apple);linkedList.add(Banana);linkedList.add(Orange);// 获取元素String firstElement linkedList.get(0);System.out.println(First Element: firstElement);// 修改元素linkedList.set(1, Grapes);// 删除元素linkedList.remove(Orange);// 获取 LinkedList 大小int size linkedList.size();System.out.println(Size: size);// 判断是否包含某个元素boolean containsBanana linkedList.contains(Banana);System.out.println(Contains Banana: containsBanana);// 遍历 LinkedList使用增强 for 循环System.out.println(Iterating using enhanced for loop:);for (String fruit : linkedList) {System.out.println(fruit);}// 遍历 LinkedList使用迭代器System.out.println(Iterating using Iterator:);IteratorString iterator linkedList.iterator();while (iterator.hasNext()) {String fruit iterator.next();System.out.println(fruit);}// 转换为数组Object[] array linkedList.toArray();System.out.println(Array: java.util.Arrays.toString(array));// 清空 LinkedListlinkedList.clear();// 判断是否为空boolean isEmpty linkedList.isEmpty();System.out.println(Is Empty: isEmpty);}
}以下情况使用 ArrayList :
频繁访问列表中的某一个元素。只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
2.3、Vector
//构造方法
public Vector()//使用指定的初始容量和等于0的容量增量构造一个空向量。
public Vector(int initialCapacity)//构造一个空向量使其内部数据数组的大小其标准容量增量为零。
public Vector(Collection? extends E c)//构造一个包含指定 collection 中的元素的向量
public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量构造一个空的向量 代码示例
import java.util.Vector;
import java.util.Enumeration;public class VectorExample {public static void main(String[] args) {// 创建 VectorVectorString vector new Vector();// 添加元素vector.add(Apple);vector.add(Banana);vector.add(Orange);// 获取元素String firstElement vector.get(0);System.out.println(First Element: firstElement);// 修改元素vector.set(1, Grapes);// 删除元素vector.remove(Orange);// 获取 Vector 大小int size vector.size();System.out.println(Size: size);// 判断是否包含某个元素boolean containsBanana vector.contains(Banana);System.out.println(Contains Banana: containsBanana);// 遍历 Vector使用增强 for 循环System.out.println(Iterating using enhanced for loop:);for (String fruit : vector) {System.out.println(fruit);}// 遍历 Vector使用 EnumerationSystem.out.println(Iterating using Enumeration:);EnumerationString enumeration vector.elements();while (enumeration.hasMoreElements()) {String fruit enumeration.nextElement();System.out.println(fruit);}// 转换为数组Object[] array vector.toArray();System.out.println(Array: java.util.Arrays.toString(array));// 清空 Vectorvector.clear();// 判断是否为空boolean isEmpty vector.isEmpty();System.out.println(Is Empty: isEmpty);}
}2.4、区别
ArrayListLinkedListVector实现方法动态数组双向链表动态数组线程是否安全非线程安全非线程安全线程安全适用场景适用于需要频繁随机访问元素而且不涉及多线程的场景。适用于需要频繁插入和删除元素的场景但不涉及多线程。由于线程安全性带来的性能损失不推荐在单线程环境下使用。
1ArrayList底层数据结构是数组查询快增删慢线程不安全效率高可以存储重复元素 2LinkedList 底层数据结构是链表查询慢增删快线程不安全效率高可以存储重复元素 3Vector:底层数据结构是数组查询快增删慢线程安全效率低可以存储重复元素
在多线程环境下如果需要线程安全可以考虑使用 Collections.synchronizedList() 来包装 ArrayList 或 LinkedList。
三、Set集合
Set 是 Java 集合框架中的一种接口它代表无序、不允许重复元素的集合。需要实现类来进行操作。
特点
不允许有重复的值没有索引不能使用普通for循环进行遍历
3.1、HashSet集合
特点
底层结构为“哈希表”集合对读写顺序不做保证允许有null值Set集合内容不允许重复没有索引
HashSet 类位于 java.util 包中使用前需要引入它语法格式如下
import java.util.HashSet; // 引入 HashSet 类以下实例我们创建一个 HashSet 对象 sites用于保存字符串元素
HashSetString sites new HashSetString();代码示例
import java.util.HashSet;/*** BelongsProject: Test* BelongsPackage: PACKAGE_NAME* Author: Jorya* CreateTime: 2023-11-22 16:20* Description: TODO* Version: 1.0*/
public class HashSetTest {public static void main(String[] args) {HashSetString sites new HashSetString();sites.add(Google);sites.add(Jorya);sites.add(Taobao);sites.add(Zhihu);sites.add(Jorya); // 重复的元素不会被添加System.out.println(sites.size());//计算元素数量System.out.println(sites);System.out.println(sites.contains(Taobao));//truesites.remove(Taobao); // 删除元素删除成功返回 true否则为 falsesites.clear();//删除集合所有元素}
}3.2、LinkedHashSet集合
特点 LinkedHashSet是哈希表和链表实现的Set接口具有可预测的读写顺序。 有链表来保证元素有序 有哈希表来保证元素的唯一性
import java.util.HashSet;
public class LinkedHashSetTest {public static void main(String[] args) {LinkedHashSetString sites new LinkedHashSetString();sites.add(Google);sites.add(Jorya);sites.add(Taobao);sites.add(Zhihu);sites.add(Jorya); // 重复的元素不会被添加System.out.println(sites);}
}3.3、TreeSet集合
特点
集合底层是二叉树TreeSet集合中的元素和TreeMap集合中的key部分一样元素是无序不可重复、可以按照大小顺序自动排序
四、Map集合
Map键值对集合集合中按Key-Value键值对方式存储 4.1、HashMap
特点
无序key不可重复keyvalue都可以为null key为null的时候存储在HashMap的第一个位置当key相同时新的value会覆盖旧的value
4.2、TreeMap
特点
底层是红黑树 无序 key不可重复存储映射的关系过程中需要key使用 自然排序或传递比较器比较器根据key进行排序key不能为null value可以为null添加相同 key 时新的value会覆盖旧的value底层自然排序的compareTo() 或比较器compare()方法返回值为0调用t.setValue(value),实现新的值覆盖旧的值
4.3、HashTable
特点
无序、key不可重复keyvalue不可为空