集合类总结笔记

来源:互联网 发布:苹果mac好用吗 编辑:程序博客网 时间:2024/04/30 11:45

ctrl +shift +o 导入 包

shift +o

集合类: 1136

·1个图 Collection图               Java.lang.Object               ↗           ↖            ╱                ╲          Map                   Collection                ↗   ↖                ↗       ↖       ╱       ╲            ╱           ╲      HashMap  TreeMap     Set              List                           ↗ ↖            ↗  ↖                         ╱     ╲        ╱      ╲                      HashSet   TreeSe  ArrayList  LinkedList·1个类Collections    (提供了一些静态方法实现了基于List容器的一些常用算法)·3个知识点     . for(知道即可)      . Generic(泛型非常重要)    . Auto-boxing/unboxing(自动装箱/拆箱)·六个接口    . collection (所有的一个一个向里装的容器的最上层接口)        . List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复.        . Set :元素不能重复,无序    . Map(一对一对向里存)    . Iterator(标准统一的遍历collection的方式)    . Comparable(可以应用泛型,定义这个类的两个对象之间的大小)

集合类的由来:
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的
操作,就对对象进行存储,集合就是存储对象最常用的一种方式.

集合特点:
1.用于存储对象的容器.
2.集合的长度可变.
3集合不可以存储基本数据类值型.

集合容器因内部的数据结构不同,有多种具体容器.
不断的向上抽取,就形成了集合框架.

框架的顶层接口Collection接口:

Collection的常见用法:
1.添加.
boolean add(Object obj);
boolean addAll(Collection coll);
2.删除.
boolean remove(Object obj);
boolean removeAll(Collection coll);
void clear();
3.判断.
boolean contains(Objext obj);
boolean containsAll(Collection coll);
boolean ifFmpty();判断集合中是否有元素.
4获取.
int size();
Iterator iterator ();取出元素的方式: 迭代器.
该对象必须依赖于具体容器,因为每个容器的数据结构都不同.
所以该迭代器对象是在容器中进行内部是实现的.
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的
迭代器的对象即可.也就是iterator方法.

iterator接口就是所有Collection容器进行元素索取出的公共接口
相当于抓娃娃集中的夹子

5.其他.
boolean rerainAll(Collextion coll): 取交集.
Object[] toArray();将集合转化成数组.

eg: 该写法省内存局部变量
for(Iterator it=coll.iterator();it.hasNext();){
System.out.println(it.next());
}
}

迭代器(iterator):取出元素的方法.迭代器的实现依赖子类(内部类)的实现.
迭代器取出的元素必须与容器相关联

容器:用于存储元素.

Collection
|–list:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复.
|–set:元素不能重复,无序.

List:特有的常见方法:有一个共性可以操作角标.
1.添加
void add(index,element);
void add(index,collection);

2.删除
object remove(index);

3修改
object set(index);
4.获取
Object get(index);
intoindexOf(object);
List subList(from,to);
List集合是可以完成对元素的增删改查(相对非列表而言的好处) .

list :

. 实现list接口的容器类中的元素是 有序 可重复的
. list容器中的元素都对应一个整数型的序号记载其在容器中的位置
可以根据序号存取容器中的元素

|–Vector:内部是数组数据结构.
. 同步(线程) . 100%延长 . 增删,查询都很慢.
|–ArrayList:内部是数组数据结构.
. 不同步(线程) .替代了Vector . 50%延长
. 删除元素后剩余部分会自动链接 . 查询速度快
. 删除慢 . 底层为数组结构

|–LinkedList:内部是链表数据结构.
. 不同步(线程) . 增删元素速度很快.
. 底层是链表结构

总结: 衡量标准:读的效率和改的效率
Array读快改慢
Linked改快读慢
Hash两者之间
初学者了解即可,后期慢慢练习

Collections

一个接类
List java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法
.void sort(List) 对List容器内的元素排序
.void shuffle(list)对list容器内的而对象进行随机排序
.void reverse(list)对list容器内的对象进行逆序排序
.void fill(List,object)用一个特定的对象重写整个List容器
.void copy(List dest ,list src)将src容器拷贝到dest List容器
.int binarySearch(List,object)对于顺序的List容器,采用折半的方法查找特定对象

Comparable接口

java.lang
接口 Comparable
类型参数:
T - 可以与此对象进行比较的那些对象的类型

此接口强行对实现它的每个类的对象进行整体排序。

只有一个方法:
· int compareTo(T o)
比较此对象与指定对象的顺序。

    . 返回 0   this==obj    . 返回 正  this>obj    . 返回 负  this<obj

实现了Comparable接口的 自定义类 通过实现comparaTo方法
确定该类的排序方式

·注String类中也具有该方法 详情见API
java.lang.Object
└java.lang.String
└ int compareTo(String anotherString)
按字典顺序比较两个字符串。

Iterator与ListIterator的区别:ListIterator可以

link.getFirst()获取第一个但不删除
link.removeFirst()获取元素但是会删除

set接口

set接口是Collection的子接口,set接口没有提供额外的方法,但实现
set接口的容器类中的元素是没有顺序的,而且不可重复

set容器可与数学中的”集合”概念相对应.

j2sdk API中所提供的set容器类有HashSet,TreeSet等.

·HashSet  无序

set和list都具有Constructor(Collection c)方法 取交集
方法与Collection相同,区别在于其构造有一个约束条件
不包含重复元素, 必须小心操作可变对象
此接口模仿了数学上的set抽象

·相同元素不会被加入 构造方法用以初始化容器类

Map 接口

. 实现Map接口的应用的类用来存储 键-值 对.
. Map接口的实现类HashMap和TreeMap等.
. Map类中的存储的键-值对通过键来标识,所以键值不能重复

注:
. HashMap用哈希表来实现的
. TreeMap用树(二叉树(红黑树))来实现
. 键是索引 键–值 一一对应不可重复
. 键值不能重复是相互的equals,但效率很低所以直接用hashCode
若重写equals必重写HashCode
Map常用方法

. V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
. V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

.

小知识点:

. 容器类对象在调用removev、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法
和hashCode方法:对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则.
.注意:相等的对象应该具有相等的hash codes.

.重写equals 时需重写hashCode方法(一般使用字符串hashCode返回)
当对象作为索引时(一对一对来存)重写equals方法

.增强的for循环对遍历array或Collection的时候相当方便
.缺陷:
.数组:
.不能方便的访问下标值
.集合:
.与使用Iterator相比不能方便的删除集合中的内容
.在内部也是调用Iterator
.总结:
.除了简单遍历并读出其中内容外 ,不建议使用增强的for循环

0 0
原创粉丝点击