Java集合
存放于Java.util包中,是一个存放对象的容器,但具体上,集合中存放的是多个对象的引用,对象本身还是放在堆内存中的。
集合分为三大体系:
- Set
- List
- Map
HashSet
- 不能保证元素的排列顺序:当往HashSet集合中存入一个元素时,HashSet会调用对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的位置
- 不是线程安全的
- 不可重复:指hashCode不相同
- 集合元素可以为null
TreeSet
TreeSet是支持SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
TreeSet支持两种排序方法:
- 自然排序(默认)
- 自定义排序
需要实现Comparator接口
//Person实现了Comparator接口,接口多态
Set<Person> set=new TreeSet<Person>(new Person());
class Person implements Comparator<Person>{
int age;
String name;
public Person(){}
public Person(String name,int age){
this.age=age;
this.name=name;
}
@Override
public int compare(Person o1,Person o2){
if(o1.age>o2.age){
return 1;
}else if(o1.age<o2.age){
return -1;
}else{
return 0;
}
}
}
ArrayList
List代表一个元素有序、且可重复的集合
ArrayList和Vector是List接口的两个典型实现:
- vector很古老
- ArrayList是线程不安全的,而Vector是线程安全的
Map
用于保存具有映射关心的数据
//java map的遍历
Map<String,Integer> map=new HashMap<String,Integer>();
//遍历key集合
for(Integer key:map.keySet()){
System.out.println(key+map.get(key));
}
//遍历Entry集合
Set<Entry<String,Integer>> entrys=map.entrySet();
for(Entry<String,Integer> en: entrys){
System.out.println(en.getKey()+en.getValue());
}
HashMap & Hashtable
两者都是map的经典实现类
- hashtable很古老
- hashtable线程安全
- hasthtable不允许使用null作为key和value
TreeMap存储时同事会对Key进行排序,自然排序使用的是字典序
Collections
操作Set、List和Map等集合的工具类
- Collections.reverse(List)
- Collections.shuffle(List)
- Collections.sort(List)
- Collections.reverse(List,Comparator)
Student s1=new Student(14,"");
Student s2=new Student(12,"");
Student s3=new Student(13,"");
Student s4=new Student(15,"");
List<Student> stus=new ArrayList<Student>();
stus.add(s1);
stus.add(s2);
stus.add(s3);
stus.add(s4 );
Collections.sort(stus,new Student());m
//实现Comparator接口
class Student implements Comparator<Student>{
int age;
String name;
public Student()
public Student(int age,String name){
this.age=age;
this.name=name;
}
@Override
public int compare(Student o1,Student o2){
if(o1.age>o2.age){
return 1;
}else if(o1.age<o2.age){
return -1;
}else{
return 0;
}
}
}
- Collections.swap(List,int,int);
- Collections.max/min(List,Comparator)
- Collections.frequency(List,value)
- Collections.replaceAll(List,oldVal,newVal)