栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 集合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 集合

文章目录
  • 集合框架
  • Collection方法
  • Collections工具类
  • List接口
    • ArrayList
    • LinkedList
    • Vector
    • List方法
  • set接口
    • HashSet
    • LinkedHashSet
    • TreeSet
  • Map接口
    • HashMap
    • LinkedHasMap
    • TreeMap(SortedMap的实现类)
    • Hashtable
    • Properties
    • Map方法

关于数组:
①初始化时长度就确定,不可修改
②定义时就确定了数据类型
③提供的方法有限,操作不便,效率低
④存储的数据:有序、可重复

集合框架

(集合中的数据所在的自定义类都需要重写equals()方法)

Collection方法

equals(Object obj):
add(E e) : 添加元素
size() : 获取元素的个数
addAll(Collection coll):将col集合中的元素添加到当前集合
isEmpty():元素个数是否为0
clear() :清空元素
contains(Object obj):判断集合中是否包含obj【调用equals,自定义类需要重写】
containsAll(Collection coll):判断coll中的所有元素是否都在该集合中
remove(Object obj):返回boolean,移除指定元素
removeAll(Collection coll):从当前集合中移除coll中的所有元素(共有)
tetainAll(Collection coll) :修改当前集合为两集合的交集
hashCode():返回哈希值

集合—>数组:toArray():
数组—>集合:调用Arrays.asList(arr)

iterator():返回迭代器接口的实例,用遍历集合元素【调一次返回一个新实例】

Iterator iterator = set1.iterator();
while(iterator.hasNext()){
	System.out.println(iterator.next());
}
Iterator iterator = set1.iterator();//再次操作需要重新生成
while(iterator.hasNext()){
Object objiterator.next();
if("TOM".equals(obj)){
iterator.remove(); 
}
  }

【next():指针后移并返回对象】

foreach :用于遍历集合、数组
for(集合数组元素的类型 局部变量 : 集合数组对象){}
【原理:利用迭代器,赋值给新的obj】

for(Object obj : coll){
System.out.println(obj);
} 
Collections工具类

Collection和Collections的区别?
Collection: 接口,单列集合,存储对象
Collections: 提供操作List、Set、Map等集合静态方法的工具类

同步控制:
Collections.synchronizedXxx(xxx):返回线程安全的集合

reverse(List):反转
shuffle(List):随机排序
sort(List):自然排序
sort(List , Comparator):定制排序
swap(List , int , int):交换

Object max(Collection):按自然排序返回最大的数据
Object max(Collection , Comparator):
Object min(Collection):
Object min(Collection , Comparator):
int frequency(Collection , Object):返回指定数据出现的次数
boolean replaceAll(List , Object oldVal , Object newVal): 替换
void copy(List dest , List src):将src中的内容复制到dest中
注意:dest.size()要不小于src.size()【是元素个数,不是数组长度】
可以考虑:List dest = Arrays.asList( new Object [ list.size() ] );

List接口

三个类都实现了List接口,存储的数据是有序的,可重复的
添加的数据所在的自定义类需要重写equals()方法

ArrayList

作为List接口的主要实现类;线程不安全的,效率高;底层仍是使用数组Object[] elementData存储
源码分析:
①jdk7之前,使用空参构造器,new一个长度为10的Object[],扩容默认情况是1.5倍,新造数组需要先复制原有数组的元素再添加;考虑使用带参构造器(int capacity)
②jdk8之后,ArrayList list = new ArrayList()时数组初始化为{},第一次添加时才创建长度为10 的数组,后续同上【懒汉】

LinkedList

对于频繁的插入、删除操作,此类效率更高;底层使用双向链表存储
源码分析:LinkedList list = new LinkedList();内部声明Node类型的first和last属性,默认值为null;添加时封装到Node中,创建Node对象

private static class Node {
        E item;
        Node next;
        Node prev;

        Node(Node prev, E element, Node next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
	}
 }
Vector

List接口的古老实现类(jdk1.0);线程安全的,效率低;底层仍是使用数组Object[] elementData存储
源码: 创建时都new了数组,扩容为2倍,方法是synchronized的

List方法

void add(int index , Object ele) :在指定索引处添加ele元素
boolean addAll(int index , Collection eles) :在指定索引处添加eles中的所有元素
Object get(int index) :获取指定索引上的元素
int indexOf(Object obj) :返回obj在集合中首次出现的位置
int lastIndexOf(Object obj) :返回obj在集合中末次出现的位置
Object remove(int index) :移除指定索引的元素,并返回此元素
Object set(int index , Object ele) :把指定索引的元素改为ele
List subList(int fromIndex , int toIndex) : 返回左闭右开的子集合

常用方法:
增:add(E e)
删:remove(Object obj) 、Object remove(int index)
改:Object set(int index , Object ele)
查:Object get(int index)
插:void add(int index , Object ele)
长度:size()
遍历:①Iterator ②foreach ③for

set接口

没有额外定义方法,只能使用Collection中的方法;存储无序的、不可重复的数据【过滤去重】
要求:向set中添加的数据,所在类必须要重写hashCode()和equals()方法
(尽量保持相同的对象有相同的哈希值)

无序性:不等于遍历时是随机的;数据存储在底层数组中并非按索引顺序添加,而是按照数据的哈希值
不可重复性:哈希值不同;且添加的元素按照equals判断时,不能返回true;

HashSet

作为Set接口的主要实现类;线程不安全的;可以存储null值
底层存储数组+链表


底层:是HashMap, 元素是key,value是PRESENT = new Object();

LinkedHashSet

作为HashSet的子类;遍历时可以按照添加的顺序
在添加数据的同时,每个数据加入了一对引用,指向前后一个数据;
频繁的遍历对于HashSet,效率更高

TreeSet

底层红黑树
添加的数据,要求是相同类的对象
可以通过添加对象的指定属性进行排序
自然排序(Comparable):比较两个对象是否相同的标准是 compareTo()返回零,不是equals()
定制排序(Comparator):TreeSet set = new TreeSet(Comparator com); 比较两个对象是否相同的标准是 compare()返回零,不是equals()

Map接口

存储双列(key - value)数据
key-value:
key是无序的、不可重复的(Set)
value是无序的、可重复的 (Collection)
key-value构成一个Entry/Node对象(无序的、不可重复的)

HashMap

作为Map的主要实现类(jdk1.2);线程不安全的,效率高;存储null的key和value

LinkedHasMap

HashMap的子类;遍历时可以按照添加的顺序
在添加数据的同时,每个数据加入了一对引用,指向前后一个数据;
频繁的遍历对于HashSet,效率更高
底层:重写了HashMap中的newNode()

TreeMap(SortedMap的实现类)

可以对添加的key-value进行排序,使用key排序【要求key是同一个类的实例】
底层是红黑树
自然排序
定制排序

Hashtable

作为古老的实现类(1.0);线程安全的,效率低;不能存储null

Properties

Hashtable的子类,常用来处理配置文件,key-value都是String类型
常用setProperty(String key , String value)和getProperty(String key)

Map方法

Object put(Object key , Object value):添加【①②③返回null,④返回oldValue】
void putAll(Map m):添加m中的所有数据
Object remove(Object key):按照指定key移除,返回value【不存在返回null】
void clear():清空【不同于map = null】

Object get(Object key):获取指定key的value
boolean containsKey(Object key):是否包含指定key
boolean containsValue(Object value):是否包含指定value
int size():获取键值对的个数
boolean isEmpty():是否为空
boolean equals(Object obj):当前map与obj是否相等

元视图操作的方法:
Set keySet():返回所有key构成的Set集合
Collection values():返回所有value构成的Collection集合
Set entrySet():返回所有键值对构成的Set集合
【entry.getKey() + entry.getSet()…keySet() + get(Object key)】

常用方法:
增 Object put(Object key , Object value)
删 Object remove(Object key)
改 Object put(Object key , Object value)
查 Object get(Object key)
长度 int size()
遍历 keySet()、values()、entrySet()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号