Java笔记(二)集合类


Java集合类存放在java.util包中,是用于存放对象的容器,可通过泛型指定存放对象的类型。
只能用于存放对象,输入的基本数据类型将自动转化为对应的引用数据类型。

Set

Set是无序的、不可重复的集合。

HashSet

HashSet是Set接口的典型实现,多数时候使用的Set都是Hashset。

实现
继承
HashSet
Set
Collection

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的实现,可以确保集合中元素处于排序状态,支持两种排序方式,自然排序和定制排序,默认采用自然排序。

实现
继承
继承
继承
TreeSet
NavigableSet
SortedSet
Set
Collection
//定制排序,自定义类,实现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

实现
继承
ArrayList
List
Collection
//定义
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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值