集合
2020-08-04 14:08:22 0 举报
AI智能生成
java集合
作者其他创作
大纲/内容
Iterator迭代器
描述
Iterator接口是用来遍历集合取出集合里数据的适用于所有的集合类型
使用过程
Iterator接口,找实现类.
Collection接口定义方法
Iterator iterator()
ArrayList 重写方法 iterator(),返回了Iterator接口的实现类的对象
使用ArrayList集合的对象
Iterator it = array.iterator(),运行结果就是Iterator接口的实现类的对象
it是接口的实现类对象,调用方法 hasNext 和 next 集合元素迭代
Collection接口定义方法
Iterator iterator()
ArrayList 重写方法 iterator(),返回了Iterator接口的实现类的对象
使用ArrayList集合的对象
Iterator it = array.iterator(),运行结果就是Iterator接口的实现类的对象
it是接口的实现类对象,调用方法 hasNext 和 next 集合元素迭代
代码流程
Collection<String> coll = new ArrayList<String>();
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//迭代器,对集合ArrayList中的元素进行取出
//调用集合的方法iterator()获取出,Iterator接口的实现类的对象
Iterator<String> it = coll.iterator();
//迭代是反复内容,使用循环实现,循环的条件,集合中没元素, hasNext()返回了false
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//迭代器,对集合ArrayList中的元素进行取出
//调用集合的方法iterator()获取出,Iterator接口的实现类的对象
Iterator<String> it = coll.iterator();
//迭代是反复内容,使用循环实现,循环的条件,集合中没元素, hasNext()返回了false
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
Iterator并发修改异常
在遍历集合的时候修改了集合里面的内容或者长度就会发生迭代器修改并发异常
在集合遍历的时候是不能修改集合里的数据的或者添加的
判断集合元素唯一的原理
ArrayList的contains方法判断元素是否重复原理
3HashSet的add/contains等方法判断元素是否重复原理
JDK5的新特性
方法的可变参数
在方法中的参数数据类型是一样的时候我们在调用方法的时候可以传入任意数量的参数个数这就是方法的可变参数
可变参数它是一个数组格式的
可变参数它是一个数组格式的
定义格式
数据类型...变量名 如:public void 方法名(int ...a){}
可变参数的注意事项
1. 一个方法中,可变参数只能有一个
2. 可变参数,必须写在参数列表的最后一位
2. 可变参数,必须写在参数列表的最后一位
Collection类
描述
这个是用来操控集合的类叫做集合的操作类,它的方法都是静态的可以用它的方法来操控集合直接类目.方法来使用
常用方法
Collections.sort()
对于集合,进行升序排列
Collections.binarySearch(集合,要查询的元素)静态方法
对集合进行二分搜索,方法参数:传递集合,传递被查找的元素
Collections.shuffle()方法
对集合中的元素,进行随机排列可以把集合中的元素进行打乱
Collection接口
描述
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
创建方法
要用这个接口就要用多态的形式去使用: Collection<引用数据类型> 变量名 = new 它的实现类ArrayList<>();
常用的方法
boolean contains(Object o) 判断对象是否存在于集合中,对象存在返回true
方法参数是Object类型
方法参数是Object类型
Object[] toArray() 集合中的元素,转成一个数组中的元素, 集合转成数组
返回是一个存储对象的数组, 数组存储的数据类型是Object
返回是一个存储对象的数组, 数组存储的数据类型是Object
boolean remove(Object o)移除集合中指定的元素返回boolean类型
List接口集合
List接口描述
List接口派系, 继承Collection接口 下面有很多实现类常用的有:ArrayList, LinkedList
List接口的特点
有序,索引,可以重复元素
List接口的方法
List接口中的抽象方法,有一部分方法和他的父接口Collection是一样
List接口特有的方法:有索引的方法都是List的特有的方法它的子类都有
add(int index, E):将元素插入到列表的指定索引上,带有索引的操作,要防止越界问题
remove(int index):移除指定索引上的元素,返回被删除之前的元素
set(int index, E):修改指定索引上的元素 返回被修改之前的元素
ArrayList集合
ArrayList集合的描述
ArrayList集合是程序中最常见的一种集合,它属于引用数据类型(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
ArrayList集合的创建
AarryList<引用数据类型> array = new Arrylist<引用数据类型>();
ArrayList 集合中的方法(常用方法):
add(参数):向集合中添加元素,数据的存储
这个方法的参数类型:定义集合对象时候的类型是什么这个参数就是 什么类型
这个方法的参数类型:定义集合对象时候的类型是什么这个参数就是 什么类型
get(int index):
取出集合中的元素,get方法的参数,写入索引(用索引来去出里面的数据)
取出集合中的元素,get方法的参数,写入索引(用索引来去出里面的数据)
size():返回集合的长度,也就是集合存储元素的个数
add(int 索引,存储的元素(内容)):
将元素添加到你要存储到集合的位置
将元素添加到你要存储到集合的位置
set(int 索引,修改后的元素):
修改集合里的内容也就是元素
修改集合里的内容也就是元素
remove(int 索引):
删除指定索引上的集合元素.
删除指定索引上的集合元素.
clear():
删除集合里的所有元素 只删除元素 不会影响集合
删除集合里的所有元素 只删除元素 不会影响集合
ArrayList自身的特点
ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
LinkedList集合
LinkedList自身特点
LinkedList集合数据存储的结构是链表结构。查询慢,增删快。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作
LinkedList集合的特有功能(方法):子类的特有功能,不能多态调用
addFirst(E)添加到链表的开头也就元素的前面
addLast(E) 添加到链表的结尾
E removeFirst() 移除并返回链表的开头
E removeLast() 移除并返回链表的结尾
E getFirst() 获取链表的开头
E getLast() 获取链表的结尾
Set接口
Set接口描述
Set接口它是存储不重复元素的一个接口,它里面的集合,所存储的元素就是不重复的。
查阅Set集合的API介绍,通过元素的equals方法,来判断是否为重复元素
Set接口的特点
无序,不重复元素,没索引
HashSet集合
HashSet集合的描述
它的数据存储结构是哈希表结构,无序集合,存储和取出的顺序不同,没有索引,不存储重复元素,它是Set接口的一个实现类
HashSet集合的使用
代码的编写上,和ArrayList完全一致
HashSet集合的自身特点
底层数据结构,是哈希表,存储,取出都比较快 线程不安全,运行速度快
哈希表
它是链表数组结合体
对象的哈希值
对象的哈希值,普通的十进制整数
父类Object类,有方法 public int hashCode() 计算结果int整数 也就是每个类都可以使用这个方法获取它的哈希值
String的哈希值
如果你给的数据是一样的它的哈希值也会是一样的这样
存储过程
HashSet集合的特有方法
存入对象的equals这个方法就可以判断HashSet存储的元素是否重复
自定义类要存入HashSet集合里要重写两个方法工具会重写
hashCode()
equals()
LinkedHashSe类
描述描述
我们知道HashSet保证元素唯一,可是元素存放进去是没有顺序的,那么我们要保证有序,怎么办呢?
在HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。
在HashSet下面有一个子类LinkedHashSet,它是链表和哈希表组合的一个数据存储结构。
创建方式
Set<String> set = new LinkedHashSet<String>();
泛型
泛型的描述
由于集合中什么类型都可以存进去在取出来的时候容易发生转换异常,所以必须明确集合中的元素类型这个就称为:泛型。所以创建集合的时候一定要给类型
泛型类
类的前面有<E>的类就是泛型类 ArrayList<E> 类就个泛型类 E:代表就传入什么数据E就是什么类型的数据
泛型的好处
解决了程序的安全性避免程序中的转换异常
泛型的通配符
? 这个通配符在集合中代表的可以返回任何集合类型主要作为参数传递,泛型的通配,匹配所有的数据类型 ?
泛型的限制
? extends 父类 ?:用来限制父类的,传过来的值可以是父类也可以是子类 不能传它的父类
? sups 类 这个是限制子类的,传过来的值可以是它自己这类也可以是它的父类 不能传它的子类了
Map接口
Map接口的描述
Map接口中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
map接口和Collection接口的区别:Collection中的集合称为单列集合,Map中的集合称为双列集合。
Map注意事项
Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map接口的常用方法
put(K,V)方法
K 作为键的对象, V作为值的对象
存储的是重复的键,将原有的值,覆盖
返回值是V值一般情况下返回null,
存储重复键的时候,返回被覆盖之前的值
V get(K)方法
通过键对象,获取值对象,你键是啥了就会获取到你键对应的值
如果集合中没有这个键,返回null
V remove(K)方法
移除集合中的键值对,返回被移除之前的值
Map接口的遍历方法
方法1:keySet()方法
描述:利用键获取值
1. 调用map集合的方法keySet,所有的键存储到Set集合中
2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)可以使用迭代器方式遍历也可以用增强for遍历获取
3. 调用map集合方法get(K),通过键获取到值
2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)可以使用迭代器方式遍历也可以用增强for遍历获取
3. 调用map集合方法get(K),通过键获取到值
方法2: entrySet()方法
描述:entrySet()这个方法返回的是Map接口里的一个内部接口Entry接口就是他们的映射对象可以理解为结婚证
1. 调用map集合方法entrySet()将获取到集合中的映射关系对象,存储到Set集合
Set<Map.Entry <K,V> >
2. 迭代或者用增强for遍历集合Set集合
3. 获取出的Set集合的元素,是映射关系对象Entry对象
4. 通过映射关系对象方法 getKet(), getValue()方法获取键值对
Set<Map.Entry <K,V> >
2. 迭代或者用增强for遍历集合Set集合
3. 获取出的Set集合的元素,是映射关系对象Entry对象
4. 通过映射关系对象方法 getKet(), getValue()方法获取键值对
HashMap集合
HashMap集合描述
它的数据存储结构是哈希表结构,无序集合,存储和取出的顺序不同,,不存储重复的键元素,值可以重复,HashMap它是Map集合的实现类
使用方式
使用方式和HashSet集合是一样的这里我就不在写了
LinkedHashMap集合
描述
它继承于HashMap集合 这个集合它可以保证顺序
Hashtable集合
底层数据结果哈希表,特点和HashMap是一样的
Hashtable 线程安全集合,运行速度慢
Hashtable命运和Vector是一样的,从JDK1.2开始,被更先进的HashMap取代
Hashtable 不允许存储null值,null键
Hashtable 线程安全集合,运行速度慢
Hashtable命运和Vector是一样的,从JDK1.2开始,被更先进的HashMap取代
Hashtable 不允许存储null值,null键
自由主题
分支主题
0 条评论
下一页