Java学习知识点小结3(集合)

1.容器
可以放置对象或基本类型数据,例如数组。
数组优势:简单线性序列,效率高。劣势:不灵活,容量要事先定义好。
其他容器接口:

Collection
Set :HashSet
List:ArrayList,LinkedList
Map:HashMap,TreeMap(自定义输出顺序),LinkedHashMap

2.泛型
在类的声明处增加泛型列表 class Mycollection <T,E,V>
定义的时候传入泛型值

   Mycollection <String>mc=new Mycollection <String>();

3.Collection接口的方法
Collection<String> c = new ArrayList<>();//实现list接口,继承collection接口
常用方法:
c.size()//得到容器大小
c.contains(“xxx”) //查看容器是否包含字符串xxx
Interator iterator()//获得迭代器接口用于遍历
集合操作:
addAll(Collection c)//将c容器所有元素添加进本容器
removeAll(Collection c);//将容器内与容器c的部分删除
retainAll(Collection c)//取两容器的交集
boolean containsAll(Collection c)//判断本容器是否包含c容器内的所有元素

4.List(增加了索引相关的接口,根据index下标对List进行操作)
List有序(每个元素都有索引标记),可重复的容器(允许添加重复元素)
常用实现类ArrayList(数组),LinkedList(底层链表),Vector
List的索引方法:
list.add(index,e)//在index指定位置处插入元素e
list.set(index,e)//将index指定位置处修改成元素e
get,remove等方法类似
indexOf(Object o)//在容器内搜索元素o,若存在元素,返回第一次出现的索引位置
lastIndexOf(Object o)//返回容器内元素o最后一次出现的索引位置

5.ArrayList底层实现
数组,查询效率高(尝试用ArrayList),增删效率低(可使用LinkedList),线程不安全(可使用Vector)
ArrayList采用数组扩容的方式:当一个初始数组a满了的时候,新定义一个长度a+a/2的数组
可以在定义ArrayList给初始数组长度,默认为10。
AraayList许多方法本质上数组的拷贝。

6.LinkedList:底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全
每个数据节点中都有两个指针,分别指向前一个节点和后一个节点,还有一个本节点的数据
Node previous;
Node previous;
Object element;

7.Vector底层是数组实现的List,相关方法加了synchronized同步检查
需要线程安全的时候使用它

8.Map
用来存储“键(key)-值(value) 对”(通过键来标识,键对象不能重复)
Map 接口的常用实现类有HashMap、TreeMap、HashTable、Properties等
定义Map<Integer,String> m=new HashMap<>();
常用方法:m.put(1,“one”)//存放方法,如果键重复,则新值覆盖旧值
m.containsKey(1)//是否包含键
m.containsValue(“one”)//是否包含值

9.HashMap:(线程不安全,效率高。允许key或value为null)
一、基本结构:HashMap底层实现采用了哈希表,其基本结构就是数组+链表,(一个数组,数组的每个对象是链表 ,每个链表对象包含4部分:key对象、value对象、hash值、指向下一个Entry对象的引用)

二、存储数据过程put(key,value):
(1)获得key对象的hashcode
(2)根据hashcode计算出hash值(要求在[0, 数组长度-1]区间)
常用算法:直接取余算法:hash值 = hashcode%数组长度,
后改进位运算算法为 hash值 = hashcode&(数组长度-1)(数组长度为2的整数幂)
(3)根据hash值将对象存储进数组,如果对应索引位置已经有Entry对象,则形成链表。

三、取数据过程get(key):
(1) 获得key的hashcode,通过hash()散列算法得到hash值,定位到数组的位置
(2)调用equals()方法将key对象和链表上所有节点的key对象进行比较,返回true为止
(3) 返回equals()为true的节点对象的value对象

四、HashMap扩容后,原本在一条链上的元素分成两份,分别放到了原位置 和原位置+原数组长度 上。 通过与操作

五、entrySet()方法得到HashMap的entrySet键值对集合
keySet()获得HashMap的键的Set集合
values()得到HashMap的“值”的集合

10.TreeMap(在需要排序的Map时用)
底层:红黑二叉树
定义:Map<Integer,String> tm=new TreeMap<>();
方法: tm.keySet() //返回key列表,与put()顺序无关,按key递增方式排序,如果key是自定义类,则类继承Comparable接口定义顺序
tm.get(key)//返回键值对对应键的value值

11.类继承Comparable接口(用于当该类作为map容器的key值的时候输出顺序):
实现compareTo方法,比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

12.set(Set容器没有索引,里面元素不能重复),set的底层是HashMap,往set中加入元素本质就是把这个元素作为key加入到了内部的map中。HashSet底层是HashMap,TreeSet底层是TreeMap

13.迭代器
迭代器提供了统一的遍历容器的方式
对象自己支持迭代要实现Iterable接口
Map要使用迭代器遍历需要借助Set接口
具体遍历方法看csdn博客

14.Collections类 (区别于Collection接口)
方法:
Collections.shuffle(容器c)//随机排列c的元素
Collections.reverse(容器c)//逆序排列c的元素
Collections.sort(容器c)//按照递增排序c的元素(自定义类则Comparable接口)
Collections.binarySearch(容器c,元素e)//二分法查找容器c内是否存在元素e

15.容器存储表格数据
ORM思想:
一个表格可以用Map容器表示一行数据,多行数据为多个Map,再将多个Map放入一个List里制成表格
一个表格可以用一个Map容器(或List,Set)存储多个java bean对象,每个对象代表一行,在java bean里重写toString方法可以便于打印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值