Java集合类存放在java.util包中,是用于存放对象的容器,可通过泛型指定存放对象的类型。
只能用于存放对象,输入的基本数据类型将自动转化为对应的引用数据类型。
Set
Set是无序的、不可重复的集合。
HashSet
HashSet是Set接口的典型实现,多数时候使用的Set都是Hashset。
HashSet按照Hash算法来存储集合中的元素,因此具有良好的存取和查找性能。
向HashSet集合中存入一个元素时,会调用该对象的hashCode方法,获取hashcode,根据hashcode决定在集合中存储位置(如果两个元素的equals方法返回值相等,但hashcode值不同,依然可以添加成功,存放在不同的位置)。
//定义
Set<String> set = new HashSet<String>();
//清空集合
set.clear();
//添加元素
set.add("abc");
set.add("def");
//移除元素
set.remove("def");
//判断是否包含元素,返回boolean
set.contains("abc");
//返回集合大小(元素个数)
set.size();
//迭代器遍历
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//foreach遍历
for(String s : set){
System.out.println(s);
}
Treeset
Treeset是SortedSet的实现,可以确保集合中元素处于排序状态,支持两种排序方式,自然排序和定制排序,默认采用自然排序。
//定制排序,自定义类,实现Comparator接口,覆写compare方法
public class Tset{
public static void main(String[] args) {
Set<Person> set = new TreeSet<Person>(new Person());
Person p1 = new Person("张三",18);
Person p2 = new Person("李四",16);
Person p3 = new Person("王五",23);
Person p4 = new Person("小六",5);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
Iterator<Person> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
set.remove(new Person("小六",5));
for(Person s : set){
System.out.println(s);
}
}
}
class Person implements Comparator<Person>{
String name;
int age;
Person(){
this.name="";
this.age=0;
}
Person(String str,int age){
this.name=str;
this.age=age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "姓名:"+this.name+",年龄:"+this.age;
}
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;
}
}
}
List
List是有序的、可重复的集合,默认根据元素添加的顺序设置索引。
Arraylist
//定义
List<T> list = new ArrayList<T>;
//添加元素
list.add(T element);
//移除指定索引处的元素
list.remove(int Index);
//在指定索引处插入元素
list.add(int Index,T element);
//在指定索引处插入集合
list.addAll(int Index,Collection c);
//修改指定索引处的元素
list.set(int Index,T element);
//获取指定索引处的元素
list.get(int Index);
//查找指定元素的索引值(第一次出现和最后一次出现)
list.indexOf(T element);
list.lastIndexOf(T element);
//根据索引范围返回子集合(区间左闭右开)
list.subList(int StartIndex,int StopIndex);
Vector
Vector是List接口的一个古老的实现,通常不建议使用,Vector是线程安全的,但ArrayList是线程不安全的。
Map
Map是具有映射关系的集合。
HashMap
Map<T,V> map = new HashMap<T,V>;
map.put(T key,V value);
map.get(T key);
map.remove(T key);
map.clear();
map.containsKey(T key);
map.containsValue(V value);
map.keySet();
map.valueSet();
//通过key集合遍历
Set<T> keys = map.keySet();
for(T key : keys){
System.out.println("key:"+key+",value:"+map.get(key));
}
//通过entry遍历
Set<entry<T,V>> entrys = map.entrySet();
for(entry<T,V> en : entrys){
System.out.println("key:"+en.getKey()+",value:"+en.getValue());
}
HashTable
HashTable是古老的Map实现,不建议使用,线程安全,不允许使用null作为key或value,而HashMap线程不安全,允许使用null作为key或value,需要线程安全可使用ConcurrentHashMap。