集合的分类
集合分为两大接口:Collection接口和Map接口
Collection接口
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest02 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
//长度
System.out.println(c.size());
// 判断是否为空
System.out.println(c.isEmpty());
//添加数据
System.out.println(c.add("你好"));
System.out.println(c.add("再见"));
System.out.println(c.add("明天"));
System.out.println(c.size());
System.out.println(c.isEmpty());
//判断集合中是否存在某数据 相当于equals 比较一样
System.out.println(c.contains("你好1"));
System.out.println(c);
//移除 某元素
System.out.println(c.remove("再见"));
System.out.println(c);
//清除所有
//c.clear();
Iterator<String> it=c.iterator();
while(it.hasNext()){
String str =it.next();
System.out.println(str);
}
}
}
自定义一个集合
public class CollectionTest01 {
//它可以存储五个数据
public static void main(String[] args) {
MyCollcetion<String> m=new MyCollcetion<String>();
m.set("异常", 0);
String s=m.get(0);
System.out.println(s);
}
}
// 自定义一个集合
class MyCollcetion<E>{
// 创建类未继承父类,则默认继承Object类(Object类是所有类的父类) 可以存储各种类型元素
Object[] object = new Object[5];
// 进行传值
public void set(E e, int index) {
object[index] = e;
}
// 进行获取值
public E get(int index) {
return (E) object[index];
}
}
Collection接口分为Set接口和List接口
Set接口和List接口都是继承Collection接口而出现的)
Set接口:不允许添加重复元素
List接口:允许添加重复元素,相当于数组,按角标来处理元素
Set接口:不允许添加重复元素,没有角标
import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.List;
public class CollectionTest05 {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
// set 不允许重复 以及不连续的
// set 是没有下标的
s.add("aa");
s.add("bb");
s.add("aa");
System.out.println(s);
// List 的方法和使用
List<String> l = new ArrayList<String>();
l.add("aa");
l.add("bb");
l.add("cc");
// 在指定位置插入(可通过角标来操作元素)
l.add(2, "插队的");
}
}
List接口与数组的区别
数组是定长的,数组在定义时就已经固定其存储大小
List集合接口是不定长的,可以随意添加不定个数元素
List实现类
ArrayList LinkedList Vector Stack
ArrayList:常用类,底层用数组实现.添加、删除速度慢,但查询速度快
LinkedList:双链表形式存储,添加、删除速度快,但查询慢
Vector:是线程安全类,性能差.在多线程中使用
Stack:Vector类的子类,是模拟堆栈的实现类
Set实现类
TreeSet HashSet LinkedHashSet
TreeSet是自动排序,不允许添加null值
HashSet 是哈希表排序,允许添加null值
LinkedHashSet是链表类型,不排序,允许添加null值
List Set常用类基本用法
import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
public class CollectionWork01 {
public static void main(String[] args) {
// ArrayList 集合
List<Student> list1 = new ArrayList<Student>();
list1.add(new Student(01, "李国威"));
list1.add(new Student(02,"洪少丰"));
// for each 输出
for (Student student : list1) {
System.out.println(student);
}
//LinkedList集合
List<Student> list2 = new LinkedList<Student>();
list2.add(new Student(01, "熊欣"));
list2.add(new Student(02, "汪祥"));
list2.add(new Student(02, "汪祥"));
for (Student student : list2) {
System.out.println(student);
}
//Set 的 hashSet 集合
Set<Student> set = new HashSet<Student>();
set.add(new Student(01,"陈凯"));
set.add(new Student(02, "王旭"));
set.add(new Student(02, "111"));
for (Student student : set) {
System.out.println(student);
}
//Set TreeSet集合(自动排序)
TreeSet<String> set2 = new TreeSet<String>();
set2.add("A");
set2.add("C");
set2.add("D");
set2.add("B");
for (String string : set2) {
System.out.println(string);
}
}
}
}
class Student {
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
}