概念:在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体
为什么使用集合框架:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象可以使用Java集合框架
Collection接口的常用方法
集合作为容器应该具有的功能(增,删,改,查), 不一定全有。
集合的基本操作:增加,删除,判断,取出
| 方法名 | 作用 |
| add(Object obj) | 添加,存储的是对象的引用 |
| size() | 容器中元素的实际个数 |
|
remove(Object obj) clear() removeAll(Collection c) retainAll(Collection c) | 删除 |
|
contains(Object obj) isEmpty() | 判断元素 |
| iterator() | 遍历元素 |
List与Set接口
Collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map接口存储一组键值对象,提供key到value的映射
List特点:有序,不唯一(可重复)
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
优点:遍历元素和随机访问元素的效率比较高
缺点:添加和删除需要大量移动元素效率低,按照内容查询效 率低
LinkedList采用链表存储方式。
优点:插入、删除元素时效率比较高
缺点:遍历和随机访问元素效率低下
|
add(index,element) addAll(index,Collection) addAll(Collection) |
在指定索引的位置上插入元素 在指定的引的位置上插入整个集合的元素 在结束插入整个集合的元素 |
| remove(index) | 根据索引删除指定的元素 |
| set(index,element) | 使用element替换指定索引位置上的元素 |
| get(index) subList(from,to) listIterator(); | 获取元素 |
Iterator 接口
所有实现了Collection接口的容器类都有一个iterator方法用以返 回一个实现了Iterator接口的对象。 Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历 操作。
所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器 完成。迭代器为集合而生,与门实现集合遍历
Iterator是迭代器设计模式的具体实现
Iterator方法
boolean hasNext():判断是否存在另一个可访问的元素
Object next():返回要访问的下一个元素
void remove():删除上次访问返回的对象
For-each循环:
增强的for循环,遍历array或Collection的时候相当简便
无需获得集合和数组的长度,无需使用索引访问元素,无需循环条件
遍历集合时底层调用Iterator完成操作
For-each缺陷 :
数组: 不能方便的访问下标值
不要在for-each中尝试对变量赋值,只是一个临时变量
集合:不使用Iterator相比,不能方便 的删除集合中的内容
For-each总结:
除了简单的遍历并读出其中的内容外,不建议使用增强for
public class TestDogDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new DogDemo("欧欧", 90));
list.add(new DogDemo("美美", 100));
list.add(new DogDemo("丽丽", 89));
list.add(new DogDemo("亚亚", 99));
System.out.println(list.size());
for(Iterator itr = list.iterator();itr.hasNext();){
System.out.println(itr.next());
}
}
}
public class DogDemo {
private String name;
private int age;
public String getName() {
return name;
}
public DogDemo() {
}
public DogDemo(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "DogDemo{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
linkedList特有的方法
|
addFirst(Object obj) addLast(Object obj) offerFirst(Object obj) offerLast(Object obj) | 添加头 添加尾 |
|
removeFirst() removeLast(); pollFirst() pollLast() |
删除头 删除尾 获取元素并删除元素 |
|
getFirst() getLast() peekFirst() peekLast() |
获取头 获取尾 获取元素但不删除 |
ArrayList:
遍历元素和随机访问元素的效率比较高
插入、删除等操作频繁时性能低下
LinkedList :
插入、删除元素时效率较高
查找效率较低
HashSet
HashSet hs=new HashSet();//创建HashSet对象
hs.add(new Person("张三",20));
hs.add(new Person("李四",22));
hs.add(new Person("王五",23));
hs.add(new Person("李四",22));
HashSet存储进了相同的对象,不符合实际情况
解决方案: 重写equals方法不hashCode方法
本文深入解析Java集合框架的原理,讲解为何使用集合,介绍了Collection接口常用方法及List、Set、Map的区别,涵盖增删改查操作,并探讨了ArrayList、LinkedList、HashSet的特点。最后,通过实例演示如何使用集合和迭代器,以及For-each循环的应用和限制。
&spm=1001.2101.3001.5002&articleId=124693658&d=1&t=3&u=ad73fdac7add4884ad40a92d2887e830)
2万+

被折叠的 条评论
为什么被折叠?



