Java基础——集合(持续更新中)
集合框架
java.util.collection
collection接口中的共性功能
1,添加
booblean add(object obj); 往该集合中添加元素,一次添加一个
boolean addall(collection c); 将指定 collection 中的所有元素都添加到此 collection 中
2,删除
void clear(); 移除此 collection 中的所有元素
boolean remove(object o); 从此 collection 中移除指定元素的单个实例,如果存在的话
boolean removeall(collection e); 移除此 collection 中那些也包含在指定 collection 中的所有元素
3,获取
int size(); 返回此 collection 中的元素数。
4,判断
boolean isempty();
boolean contains(object o); 如果此 collection 包含指定的元素,则返回 true。
boolean containsall(collection c); 如果此 collection 包含指定 collection 中的所有元素,则返回 true。
5,将集合转成数组
toarray(); 返回包含此 collection 中所有元素的数组。
toarray(t[ ] a); 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
6,取出集合元素
iterator iterator(); 获取集合中元素上迭代功能的迭代器对象;
返回在此 collection 的元素上进行迭代的迭代器。
迭代:取出元素的一种方式;
迭代器:具备着迭代功能的对象;
而迭代器对象不需要new,直接通过iterator()方法获取即可,迭代器是取出collection集合中元素的公共方法.
collection
|--list:有序(存入的顺序和取出的顺序一致)有索引,允许重复元素
|--set:不允许重复元素
重点list接口中的特有方法:它的特有方法都是围绕索引定义的.list支持增删改查;
1.增
add(index,element);
2,删
remove(index);
3,改
set(index,new element);
4,查
int indexof(element);
element get(index);
list集合的具体子类;子类之所以区分是因为内部的数据接口(存储数据的方式)不同。
jdk1.0 |--vector:数据结构是数组;数组是可变长度的(不断new新数组并将原数组元素复制到新数组),线程是同步的,增删和查询都比较慢。
jdk1.2 |--arraylist:也是数组结构,也是长度可变的。线程不同步的,替代了vector增删速度不快,查询速度很快。
|--linkedlist:链表结构,线程不同步的。增删速度很快,查询速度较慢。
linkedlisgt的特特殊方法:
1,增加元素
addfirst(e e);将指定元素插入此列表的开头。
addlast(e e):将指定元素添加到此列表的结尾。
2,获取元素
getfirst();返回此列表的第一个元素。
getlast();返回此列表的最后一个元素。
3,删除元素
removefirst();移除并返回此列表的第一个元素。
removelast(); 移除并返回此列表的最后一个元素。
set集合:不允许重复元素;和collection的方法相同;set集合取出方法只有一个:迭代器
|--hashset:哈希(散列)表结构
|--linkedhashset:哈希表+链表结构。可以实现有序
此类实现 set 接口,由哈希表(实际上是一个 hashmap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
如何保持元素唯一性?
元素必须覆盖hashcode()和equals()方法;
hashcode()方法是为了根据元素自身的特点确定哈希值;覆盖equals()方法是为了解决哈希值的冲突(只有hashcode()方法一致时在需要equals()方法)。
|--treeset:可以对元素进行排序;不同步的,二叉树数据结构
排序方式一:需要元素具备比较功能.所以元素需要实现comparable接口,覆盖compareto方法
如何保证元素唯一性?
参考的就是比较方法的返回值是否为0;是,则是重复元素,不进行存储。
需求中也有这样的一种情况,元素具备的比较功能不是所需要的,也就是说不想按照自然排序的方法,而是按照自定义的排序方式,对元素进行排序。
而且,存储到treeset中的元素万一没有比较功能,该如何排序呢?
排序方式二:实现comparator接口覆盖compare()方法。将comparator接口的对象,作为参数传递给treeset集合的构造函数。
比较器较为灵活,自然排序通常作为元素的默认排序,一般不建议改动,要想自定义排序方法,推荐排序方式二。
集合技巧:
jdk1.2以后出现的集合框架中的常用子类对象,存在的规律。前缀名是数据结构名,后缀名是所属体系名
|--list
arraylist:数组结构;看到数组结构,就需要知道 查询快,看到list就知道可以重复,可以增删改查。
linkedlist:链表结构,增删快。特有方法:xxxfirst xxxlast addxxx getxxx removexxx
|--set
hashset:哈希表,查询速度更快,一看到这个就需要想到元素必须覆盖hashcode()方法和equals()方法。不保证有序,看到set,就需要知道元素不可以重复。
linkedhashset:链表+哈希表。因为由链表,所以可以实现有序。
treeset:二叉树,可以排序。一看到这个集合要想到两种比较方式: (1)一种是自然排序comparable (2)一种是自定义比较器 comparator
推荐阅读
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
java中的内部类(基础)
-
Java实现过滤掉map集合中key或value为空的值示例
-
请教一个相当基础的问题,Java中为什么拥有类可以访问内部类的私有成员? JavaAccessSUN
-
PHP中调用JAVA_php基础
-
java集合中list的用法代码示例
-
java集合中的list详解
-
Java中File文件操作类的基础用法
-
Java集合基础知识 List/Set/Map详解
-
Java实现过滤掉map集合中key或value为空的值示例