一、集合概述
集合的特点如下:
-
动态大小:集合可以根据需要动态调整大小,不像数组需要提前指定大小。
-
灵活性:集合提供了各种不同类型的数据结构和容器,例如列表、集、映射、队列等,以满足不同的存储和操作需求。
-
高效性:Java集合框架中的实现类经过优化,提供高效的插入、删除和查找操作。例如,ArrayList在随机访问元素时具有较高的性能,而LinkedList在插入和删除操作时更为高效。
-
泛型支持:集合框架引入了泛型,可以在编译期间进行类型检查,提高代码的安全性和可读性。
-
统一的接口:集合框架定义了一组统一的接口和规范,使得不同的集合实现类之间可以很方便地切换和替换,提高了代码的灵活性和可维护性。
-
提供丰富的操作方法:集合框架提供了丰富的方法和算法来对集合进行操作和处理,例如排序、过滤、映射等,方便开发者进行数据处理和转换
Java中的集合分为collection接口和Map接口
其中collection接口又分为:list与set两个接口
二、Collection
Collection接口中的抽象方法:
boolean add(Object e) 默认是在集合的末尾处添加元素
boolean remove(Object o) 移除某一个元素
void clear() 清空集合
boolean contains(Object o) 判断集合中是否存在某个元素
boolean isEmpty() 判断是否为空
int size() 获取集合元素的个数
Collection中的成员方法:
boolean addAll(Collection c) 将一个集合的所有元素添加到当前集合中
boolean removeAll(Collection c) 将当前集合中与给定集合相同的元素全部移除
boolean containsAll(Collection c) 检查当前集合是否包含给定集合中的所有元素
boolean retainAll(Collection c) 保留当前集合中与给定集合相同的元素
Collection集合的遍历:
1、Object[] toArray() 将集合变成数组
2、Iterator iterator() 迭代器遍历,是Collection集合的特有遍历方法
3、增强for循环 只适用于Collection集合和数组
package com.shujia.day10; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /* List集合特有的迭代器: ListIterator listIterator() */ public class ListDemo3 { public static void main(String[] args) { //1、创建集合对象 List l1 = new ArrayList(); l1.add("hello"); l1.add("world"); l1.add("java"); l1.add("hadoop"); System.out.println("l1: " + l1); System.out.println("-------------------------------"); //获取listIterator ListIterator listIterator = l1.listIterator(); //ListIterator listIterator = new ListItr() while (listIterator.hasNext()){ Object o = listIterator.next(); System.out.println(o); } System.out.println("--------------------------------------"); //判断前一个位置上有没有元素,如果想要正向遍历两次的话,得先倒着遍历一次,很麻烦,所以这个需求实现基本不会去做 while (listIterator.hasPrevious()){ //向前移动一格游标,取出前一个位置上的元素 System.out.println(listIterator.previous()); } }
1、list(元素有序且可以重复)
因为List集合中多了一个索引的概念,那么就可以根据索引扩展很多特有的方法
void add(int index,Object element) 根据索引位置添加元素
Object remove(int index) 根据索引位置删除元素
Object get(int index) 获取索引位置上对应的元素
Object set(int index,Object element) 修改索引位置上的元素值
ListIterator listIterator() 返回一个ListIterator对象,该对象用于遍历ArrayList中的元素。
实现子类:ArrayList,vector,LinkedList
①ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高
如果要去重的话,重写equals方法
②Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低
即使线程安全,以后也不用(之后会将ArrayList变成线程安全的来使用)
成员方法: public void addElement(Object obj) 完全可以使用add()方法代替 public Object elementAt(int index) 根据索引获取元素 完全可以使用get()方法代替 public Enumeration elements() 可以使用迭代器代替
③LinkedList:底层数据结构是双链表,查询慢,增删快,线程不安全,效率高
特有的成员方法:
public void addFirst(E e)及addLast(E e) 添加元素 效果和add()是一样
public E getFirst()及getLast() 获取元素
public E removeFirst()及public E removeLast() 删除元素
2、Set(元素无序且唯一)
实现子类:HashSet,TreeSet
①HashSet:底层数据结构是哈希表,保证了元素的唯一
如果要去重的话,重写hashCode()和equals()
子类:LinkedHashSet 底层数据结构是哈希表和双链表,哈希表保证了元素的唯一性,双链表保证了元素的有序
②TreeSet:底层数据结构是红黑树,在保证元素唯一的同时,还可以对元素进行排序
TreeSet的add方法实际上底层调用的是TreeMap的put方法
排序方法:
自然排序:元素类型要实现Comparable接口,并实现compareTo方法;当TreeSet是无参构造方法创建的时候,默认走的是自然排序
比较器排序:在创建对象的时候,传入一个实现了Comparator接口的对象,实现compare方法
三、Map
概述:元素是有key-value键值对组成的 ;Map本身是一个接口,我们需要借助一个实现子类去创建对象,才能调用方法
元素特点:
1、对于每个元素本身而言,一个键只能对应一个值
2、对于整体而言,键不允许重复,值却可以
Map接口中的成员方法:
V put(K key,V value) 向集合中添加一组键值对 返回键对应的历史值
V remove(Object key) 根据键删除一个键值对,返回被删除的value值
void clear() 清空集合中所有键值对
boolean containsKey(Object key) 判断是否包含某个键
boolean containsValue(Object value) 判断是否包含某个值
boolean isEmpty() 是否为空
int size() 获取元素(键值对)的个数
Map集合的遍历方式:
1、挨个遍历每个键值对,根据键获取值
// 先获取所有的键keySet(),get()根据键获取值 Set<Integer> keySet = map.keySet(); for (Integer key : keySet) { //根据key获取值 String value = map.get(key); System.out.println(key + ":" + value); }
2、一次性获取所有的键,遍历所有的键,得到每一个值
//一次性获取所有的键值对,然后遍历每个键值对得到键和值 // entrySet() 一次性获取所有的键值对 Set<Map.Entry<Integer, String>> entrySet = map.entrySet(); for (Map.Entry<Integer, String> entry : entrySet) { Integer key = entry.getKey(); String value = entry.getValue(); System.out.println(key + ":" + value);
实现子类:HashMap,TreeMap
①HashMap :底层数据结构是哈希表,保证了key的唯一
HashMap中的去重是针对key来说的,要求key的类型要重写hashCode方法和equals方法
HashMap和Hashtable的区别:
HashMap是线程不安全的,而Hashtable是线程安全的
HashMap的key和value允许为null值,而Hashtable不允许
子类:
LinkedHashMap:底层数据结构是哈希表和双链表,哈希表保证了key的唯一性,双链表保证了key的有序
②TreeMap:底层数据结构是红黑树,可以进行自然排序和比较器排序,排序是针对于key来排序。
标签:元素,Java,Object,boolean,键值,key,集合 From: https://www.cnblogs.com/SIKE231310/p/17816987.html