1.概念:
集合:存储对象的容器
框架:别人帮我们写好的一些工具和程序
2.对比数组
数组 | 集合 |
对象容器 | 对象容器 |
有下标 | 有下标 |
长度固定(可扩容) | 长度不固定 |
插入、删除麻烦 | 借助方法方便 |
连续的空间 | 连续的空间 |
3.关系总览
接口 | 特点 | 关系 |
Collection | 元素是对象 | |
List | 元素有序,可重复 | Collection子接口 |
Set | 元素无序,不可重复 | Collection子接口 |
4.Collection:
(1)接口
(2)常用方法:
①add(Object o)把元素添加到集合中
②clear()清空集合
③Contains(Object o)判断元素是否存在
④remove(Object o)删除对象o
⑤size()返回集合长度
(3)实现类:无
Collection工具类:
(1)作用:
作用于集合,可以对集合中的元素进行排序
常用方法:
方法名 | 作用 |
public static void sort(List list) | 将集合中元素按照升序排列整理 |
public static void reverse(List list) | 将集合中的元素颠倒位置 |
public static void shuffle(List list) | 将集合中的元素随机排列 |
例子:
package nearly.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class ListToArrayList01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add("zhangsi");
list.add("9527");
list.add("4399");
list.add("4396");
list.add("uzi");
list.add("vn");
//1.升序排列
Collections.sort(list);
//2.逆序排列
Collections.reverse(list);
//3.随机排列
Collections.shuffle(list);
}
}
5.List
(1)Collection子接口
(2)常用方法:
①add(int pos,Object o) 下标插入
import java.util.ArrayList;
import java.util.List;
public class ListToArrayList01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
//1.添加对象到list集合
list.add("255215");
//2.添加元素到0下标
list.add(0,"zhaosi");
}
}
②remove(int pos)下标删除
package nearly.test;
import java.util.ArrayList;
import java.util.List;
public class ListToArrayList01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
//3.删除下标元素
list.remove(0);
}
}
③set(int pos,Object o)下标替换
package nearly.test;
import java.util.ArrayList;
import java.util.List;
public class ListToArrayList01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
//4.替换下标元素
list.set(0, "9527");
}
}
④get(int index)获取指定下标元素
package nearly.test;
import java.util.ArrayList;
import java.util.List;
public class ListToArrayList01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
//5.获得指定下标元素
list.get(0);
}
}
(3)遍历
1.下标遍历
List list=new ArrayList();
list.add("zhangsi");
list.add("9527");
list.add("4399");
list.add("4396");
list.add("uzi");
list.add("vn");
//1.下标遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
2.迭代器遍历
List list=new ArrayList();
list.add("zhangsi");
list.add("9527");
list.add("4399");
list.add("4396");
list.add("uzi");
list.add("vn");
//2.迭代器遍历
Iterator it=list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
3.for-each遍历
List list=new ArrayList();
list.add("zhangsi");
list.add("9527");
list.add("4399");
list.add("4396");
list.add("uzi");
list.add("vn");
//3.for-each遍历
for (Object obj : list) {
System.out.println(obj);
}
(4)实现类
实现类 | 实现 | 查询 | 增删 | 版本发布 | 线程 | 效率 |
ArrayList | 数组实现 | 查询快 | 增删慢 | JDK1.2 | 线程不安全 | 并发效率高 |
LinkedList | 链表实现 | 查询慢 | 增删快 | |||
Vector | 数组实现 | JDK1.0 | 线程安全 | 并发效率低 |
6.泛型
作用:
限制集合中元素的一致性,提高集合的安全性
例:为集合添加泛型
List<String> list=new ArrayList<String>();
(1)泛型必须是类,不能是基本数据类型
//反面例子:
List<int> //error!
//正面例子:
List<Integer> //ok!
(2)引用泛型和对象泛型必须一致,不支持多态
//反面例子:
List<Animal> list=new ArrayList<Dog>() //error!
//正面例子:
List<Dog> list=new ArrayList<Dog>() //ok!
(3)既然泛型不支持多态,对象泛型可以省略,由编译器自动推断
List<String> list=new ArrayList<>();
(4)如果没有为集合指定泛型,泛型默认为Object
泛型类:
模板编程:
class Myclass<T>{
T可以是任何一种类型
在声明引用及创建对象时赋值
可以定义多个泛型,用逗号,隔开
}
interface MyIA<E,T>{
void m1(E e);
}
泛型的通配符:
static void print(List<?> list)
?表示任何泛型
参数可以是泛型为Number或者某个子类
static void print(List<?extends Number> list)
参数可以是Double或者Double的父类
static void print(List<? super Double> list)
泛型方法:
定义位置:
修饰符之后,返回值之前
static<T> void print(List<T> list){
T o=list.get(i);
System.out.println(o);
}
方法内部可以使用泛型T
①:
static < T extends Number> void print( List<T> list)
T为Number或Number的子类
②:
static <T extends Number>