Java的常用集合框架

Java的集合框架

Java的集合框架主要分为两个部分,第一种是集合(Colletion)另外是一种是Map。
1.Collection

主要用来存储一个元素集合,Colletion接口有三个子类型,分别是List,Set和Queue.
下面是一些抽象类,类如AbsetractList。实现这些抽象类的具体类,常见的有ArrayList,
LinkedList,HashSet,TableSet,以及LinkedHashSet.

2.Map

主要存储Key-Value pair.同Collection,但其下面的抽象类和具体类不同, 主要有HashMap,TreeMap,
HashTable.

接口:代表集合的抽象数据类型,之所以定义了多个接口,是为了以不同的方式操作数据对象。
实现类:集合接口的具体实现.
算法:实现接口的对象里面一些有用的方法,例如排序和搜索,这些算法被称为多态,相同的方法在不同的接口上有不同的实现.Collections

Set——AbstractSet——HashSet
Set——SortedSet——TreeSet

Java不提供直接继承Collection的类,只能继续于子接口,

List接口是一个有序的Collection,可以控制元素插入的位置,方便索引,有序的插入。检索效率高,但插入和删除会引起其他元素位置改变,效率低
Set接口是一个无序的Collection,同时不保存重复元素,检索效率低,但删除和插入效率高,不会引起其他元素位置的改变。
SortedSet继承于Set,保证有序

Map提供Key到Value的映射
SortedMap继承于Map,保持Key升序排列

一般情况下我们使用for和增强for循环来遍历集合框架,但我们也可以使用iterator来进行遍历,迭代器实现了iterator接口的一个对象。
Iterator<>ite = list.iterator();
while(iterator.hasNext())
	System.out.println(iterator.next());
遍历Map的情况有所不同

1.通过Key可以对Map进行遍历:

 for (String key : map.keySet()) {
       System.out.println("key= "+ key + " and value= " + map.get(key));
      }

2 通过对Value进行遍历,但无法访问Key值

for (String v : map.values()) {
       System.out.println("value= " + v);
      }
ArrayList实现类的具体方法./

1.add(), addAll(int index, Collection c), remove(), clear(), set( , ), isEmpty. 最常用的方法, toString(),toArray(),
2.不太常用的方法
replaceAll(e->e*2) || replaceAll(e->e.toUppserCase())
Contains();

LinkedList

1 可以分为双向链表和单项链表
包含两个或三个部分,主要是自己节点的信息以及下一节点的地址(如果是双向链表会有上一个节点的地址)

2 实现了Deque和Queue的接口,可当作队列来使用。

常用的方法:
removeLast(); remove (int index); getFirst(); getLast();
indexOf(Object o); lastindexOf(Object o);
peek(); peekLast();

HashSet

HashSet基于HashMap来实现的,不可以有重复的值,可以有Null值。HashSet中元素是无序的,同时不是线程安全的。

常用的API
contains(Obejct o); add(); remove(Object o);

HashMap

HashMap是一个散列表,存储着Key和Value的映射。存储元素是无序的,不支持线程的同步。
常用的方法:
put(); get(); remove(key); clear(); isEmpty(); containsKey(or Value)();
replace(key, oldValue, Value) 可以选择带旧值或者不带。
getOrDefault(key, default);
compute(key, BiFunction)

map.compute(key, (key, value) -> value - value*10%);
Java Iterator

Iterator 是一种访问集合的方法,可用于迭代ArrayList和Map等集合
1.Iterator的声明:

Iterator <> it = map.iterator();

常用的方法:
iterator.hasNext();
iterator.next();
iterator.remove();

Java Object

Object 是所有类的父类。所有的子类都可以使用Object类的方法,下面详细介绍Object类的各种方法:

clone()
是一种浅拷贝,只会拷贝引用对象的地址,而不会重新分配引用对象的内存;而对应的深拷贝就会将引用对象的内存重新分配。

(类型可强制转换)obj2 = () obj1.clone();

equals()
判断两个对象的引用是否指向同一个对象,即比较2个对象的内存地址是否相等。
如果重写了equals方法,就一定要重写HashCode方法;
在Java中,对对象的存储采用了存在哈希表的处理方法,根据对象的地址转换返回的一个哈希值。

哈希表的结构:一个长度为N的数组加N个链表{
当计算出一个对象的哈希值之后,对哈希表的长度进行取余,此时不同的哈希值得到的插入数组的index可能是相同的,此时我们就应该用equals()方法进行判断,不同的话就在链表中进行插入}

两个对象的HashCode不同,则equals()方法一定返回false;
两个对象的HashCode相同,根据equals方法返回值来确定是否为true或者flase;

当我们判断两个对象的引用是否相同时,我们需要先用HashCode方法进行判断,然后再用equals方法进行判断。如果我们只重写了equals方法的话,可能会导致HashCode不同的两个对象的引用,判断得到的结果是相同的。

我们使用HashMap的目的是获取唯一映射。
如果我们将HashMap中的key值为自己写的对象,此时我们必须重写HashCode和Equals方法。如果不这样做,我们就无法实现唯一映射。

分为两个方面:
1.只重写了的HashCode而没有重写Equals
此时就要应用链表的知识,我们得到HashCode确实是相同的,但是我们还要经过equals方法进行比较,我们知道,如果不定义equals方法,默认为Object的equals方法,此时比较的是两个对象的引用,即地址。所以我们无法实现想要的功能。必须要将equals方法写为只要比较两个对象的值相同就可以。
2.只重写了的equals方法没重写hashcode
值相同的两个对象的hashCode不相同,无法实现唯一映射。

对于HashMap的查找来说,效率很高。

getClass()
object.getClass();可以返回一个对象运行时对象的类

notify()
用来唤醒一个再次对象监视器上的线程,只能被作为对象监视器的所有者来调用;
一个线程想要成为对象监视器的所有者,有三种方法:
执行对象的同步实例方法
使用 synchronized 内置锁
对于 Class 类型的对象,执行同步静态方法

wait

toString

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值