1.什么是集合?
需要存储的对象个数不确定,使用集合去操作。
2.集合的特点
集合只用于存储对象(数组主要存储变量)
集合长度是可变的(数组不可变)
集合可以存储不同类型的对象
3.什么是集合框架?
集合框架是一个用来代表和操纵集合的统一架构。
所有集合框架都包含以下内容:
接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。
实现类:是集合接口的具体实现。从本质上讲,她是可重复使用的数据结构。
算法:是实现集合接口对象里的方法执行的一些有用的计算。例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
4.Collection 接口
特点:用来存储对象的容器虽然有很多并且结构不同,但是都具备着共性,可以不断向上抽取,最终就形成集合框架,该框架的顶层之一就是Collection接口。该接口定义了集合框架中最共性的功能。最终使用的时候,其实使用的是该框架最子类的对象。
Iterable接口允许对象成为“foreach”语句的目标,即该集合对象允许迭代。
类集接口Collection是Iterable的子接口,所以所有类集对象可以迭代访问。
Collection接口及子类一次只能存放一个元素,Collection有两个子接口:
List(列表)、Set(集)
List:元素存取是有序的,可重复存放元素
Set:元素存取是无序的,不可以重复存放元素
增加元素、删除元素、是否存在某个元素、合并集合、取交集、清除所有元素
import java.util.ArrayList;
import java.util.Collection;
public class CollectionStudy {
public static void main(String[] args) {
Collection fruit=new ArrayList();
//增加元素
fruit.add("apple");
fruit.add("pear");
fruit.add("banana");
fruit.add("orange");
fruit.add("apple");
System.out.println(fruit);
//删除元素
fruit.remove("banana");
System.out.println(fruit);
//判断是否存在某个元素
boolean bool1=fruit.contains("pear");
System.out.println(bool1);
Collection fruit2=new ArrayList();
fruit2.add("potato");
fruit2.add("orange");
Collection fruit3=new ArrayList();
fruit3.add("potato");
fruit3.add("orange");
//合并集合
fruit2.addAll(fruit);
System.out.println(fruit2);
//取交集
boolean bool2=fruit2.retainAll(fruit3);//返回值是判断fruit2是否由于调用retainAll方法使元素发生更改,更改true,否则false
System.out.println(bool2);
System.out.println(fruit2);
//清除所有元素
fruit.clear();
System.out.println(fruit);
}
}
List接口:新增很多可以操纵元素下标的方法
package com.test.www.list;
import java.util.ArrayList;
import java.util.List;
public class ListStudy {
public static void main(String[] args) {
List fruits=new ArrayList<>();
//List对比collection:新增了很多可以操作元素下标(位置、索引)的方法
//1.追加元素
fruits.add("apple");
fruits.add("pear");
fruits.add("banana");
fruits.add("apple");
System.out.println(fruits);
//2.插入元素
fruits.add(1,"orange");
System.out.println(fruits);
//3.删除元素
fruits.remove(2);
System.out.println(fruits);
//4.修改元素
Object fruits1=fruits.set(3,"badApple");
System.out.println(fruits1);//被修改的元素
System.out.println(fruits);
//5.获取元素
Object fruits3=fruits.get(2);
System.out.println(fruits3);
//6.获取子集
List fruits4=fruits.subList(0,3);//获取元素下标区间为左闭右开 [0,3)
System.out.println(fruits4);
}
}
LinkedList接口:可操作首尾元素
package com.test.www.list;
import java.util.LinkedList;
public class LinkedStudy {
public static void main(String[] args) {
LinkedList fruit=new LinkedList();
//增加元素
fruit.add("pear");
fruit.add("banana");
fruit.add("orange");
//1.增加首尾元素
fruit.addFirst("apple");
fruit.addLast("apple");
System.out.println(fruit);
fruit.offerFirst("apple");
fruit.offerLast("apple");
System.out.println(fruit);
//2.获取元素
Object fruitGetF=fruit.getFirst();
Object fruitGetL=fruit.getLast();
System.out.println(fruitGetF);
System.out.println(fruitGetL);
System.out.println(fruit);
Object fruitPeekF=fruit.peekFirst();
Object fruitPeekL=fruit.peekLast();
System.out.println(fruitPeekF);
System.out.println(fruitPeekL);
System.out.println(fruit);
//3.移除首尾元素
Object fruitRemoveF=fruit.removeFirst();
Object fruitRemoveL=fruit.removeLast();
System.out.println(fruitRemoveF);
System.out.println(fruitRemoveL);
System.out.println(fruit);
Object fruitPollF=fruit.pollFirst();
Object fruitPollL=fruit.pollLast();
System.out.println(fruitPollF);
System.out.println(fruitPollL);
System.out.println(fruit);
}
}
遍历集合元素的方法:
1.通过for循环遍历集合
2.通过forEach循环遍历
3.通过集合自有的Interator(迭代器)遍历集合元素
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListErgodic {
public static void main(String[] args) {
List fruits=new ArrayList<>();
fruits.add("apple");
fruits.add("pear");
fruits.add("banana");
fruits.add("apple");
//1.通过for循环遍历集合元素
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
//2.通过forEach循环遍历集合元素
for (Object obj:fruits){
System.out.println(obj);
}
//3.通过集合自有的Iterator(迭代器)遍历集合元素
Iterator iterator=fruits.iterator();
while (iterator.hasNext()){
Object current=iterator.next();
System.out.println(current);
}
}
}