Java知识点整理(2)-容器

容器的基本概念

Collection函数库是util包下的一些接口和类,类用来产生对象存放数据,接口是访问数据的方式。
List有序可重复,Set无序不可重复,Map是键值对

List类

List list = new ArrayList();add();size();isEmpty();remove();set();get();
ArrayList底层实现是数组,线程不安全,效率高,查询快,增删改慢;LinkedList底层实现是链表,线程不安全,效率高,增删改快,查询慢;Vector线程安全,效率低。
源码中查找元素使用了二分法提升效率。

实现ArrayList

实现ArrayList需要定义Object数组变量装对象,size表示容量;定义无参和有参构造器便于初始化;数组扩容问题:重定义size并拷贝元素到新数组;数组扩容用于添加add方法之中判断;get()要判断index是否越界;remove(int index)用arraycopy改变索引位置;remove(Object o)底层用equals判断;set()修改元素并返回值。

实现LinkedList

先定义一个节点类,有指向前,后,和装元素的属性,提供访问和改变方法;主类中应该有first,last,size域;add()添加元素应该判断链表头是否为空;get(int index)以first开始遍历至index返回Node.obj;remove(int index)是把后一个前指针指向前一个的后指针;add(int index,Object o)把新元素的前指针指向上一个元素的后指针,新元素的后指针指向旧元素的前指针。

Map和HashMap的基本用法

Map类中存储的键值对通过键来标识,键值不能重复
put(k,v):存放对象;get(k):通过k得到v;remove(Object k);containsKey(k);containsValue(v);int size();boolean isEmpty();clear();void putAll(Map m);
HashMap和HashTable的区别在于后者线程安全,效率低。

实现HashMap

要另外定义一个类存放key和value属性;以类对象数组存放键值对;取元素key或value循环判断得到结果;判断键重复时覆盖值;
利用hashcode取余提高查询效率。
Map底层实现:数组+链表(数组存放链表,链表存放键值对)。
Map中使用hashcode出现负数:

hash = hash<0?-hash:hash;
int a = hash%arr.length;

equals和hashcode

Java中规定:两个内容相同的对象(即equals为true)应该具有相同的hashcode值,反之则不然。

数据的存储

1.利用JavaBean+构造器->创建实例填充数据->用容器List装载实例进行容器操作数据。
2.用Map装载字段名和记录->用List装载Map对象->利用Map的特性访问数据。
3.一个表对应一个类,一个字段对应一个属性

Set和HashSet

Set的不可重复是利用了Map的键元素不可重复!

迭代器遍历List和Set

所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,实现了对容器类元素的遍历操作。
boolean hasNext();Object next();void remove();<--在执行完next之后该操作只能执行一次。

你可能感兴趣的:(Java知识点整理(2)-容器)