java —— 集合

一、集合的概念

集合可以看做是一个存储对象的容器,与数组不同的是集合可以存储不同类型的对象,但开发中一般不这样做。集合不能存储基本类型的对象,如果存储则需要将其转化为对应的包装类。

二、集合的分类

集合分为 Collection 和 Map 两大接口,具体的实现类继承自这两大接口。

(一)Collection 接口

Collection 接口下面有 3 个子接口,可以视为 3 个分支,常用的是 List 接口和 Set 接口:

1、List 子接口

特点:存放的数据有序且允许重复,主要的实现类有 ArrayList(重点)、LinkedList、Vector,这三个实现类用法相同,具体可见:java —— ArrayList 使用方法

区别:LinkedList 增加了 .addFirst() 方法和 .addLast() 方法,分别表示在首尾添加。

public static void main(String[] args)
{
    LinkedList list=new LinkedList();
    list.add("Tom");
    list.add("Jerry");
    list.addFirst("Spike");
    list.addLast("Snoopy");
    System.out.println(list.get(0));
    System.out.println(list.get(list.size()-1));
}

2、Set 子接口

特点:存放的对象无序且不允许重复,方法与 ArrayList 相同,但由于无序,因而没有 .get() 方法,常见的实现类有 HashSet、TreeSet。

区别:HashSet 内部对象散列存放,完全无序;TreeSet 内部按照自然升序排列,与添加的先后顺序无关。自定义的类如果要在 TreeSet 内部实现自然排序,要么实现 Comparable 接口,要么自定义 Comparator 比较器。

(二)Map 接口

特点:Map 接口的实现类采用键值对的形式存储对象,主要的实现类是 HashMap、TreeMap、HashTable。虽然内部存储无序,但由于有键值对的存在,可以通过 .get(key k) 的方法获取元素。

区别:HashMap 允许键出现一次“null”,值允许为空;TreeMap 内部按照键的自然升序排列,键不允许为“null”,值允许为空;HashTable 键和值都不允许为空。

常用方法:

.containsKey(key k)判断是否包含指定的键
.containsValue(value v)判断是否包含指定的值
.get(key k)根据键获取值
.isEmpty()判断是否为空
.keySet()返回一个set集合,包含所有的键
.values()返回一个collection集合,包含所有的值
.put(key k,value v)添加元素
.putAll(Map m)将集合m添加至本集合
.remove(key k,value v)根据键删除值
.size()获取集合长度

三、服务集合的三大工具

(一)Iterator 迭代器

用法可见:java —— ArrayList 使用方法 中的 “八、迭代器”。

(二)Comparable 接口和 Comparator 比较器

用法可见:java —— Comparable 接口和 Comparator 比较器

(三)Collections 工具类

Collections 是一个操作 List、Set、Map 等集合的工具类,它提供了一系列静态方法用于对集合执行查询、排序、修改等操作。

1、排序

① 升序:Collections.sort(List list)

② 降序:Collections.reverse(List list)

③ 随即排列:Collections.shuffle(List list)

public static void main(String[] args)
{
    ArrayList<Integer> ar=new ArrayList();
    ar.add(5);
    ar.add(4);
    ar.add(7);
   //升序
    Collections.sort(ar);
    Iterator ite1=ar.iterator();
    while(ite1.hasNext())
    {
    System.out.println(ite1.next());
    }
   //降序
    Collections.reverse(ar);
    Iterator ite2=ar.iterator();
    while(ite2.hasNext())
    {
    System.out.println(ite2.next());
    }
   //随即排列
    Collections.shuffle(ar);
    Iterator ite3=ar.iterator();
    while(ite3.hasNext())
    {
    System.out.println(ite3.next());
    }
}

2、 修改

① 交换:Collections.swap(List list,int i,int j)

public static void main(String[] args)
{
    ArrayList<Integer> ar=new ArrayList();
    ar.add(5);
    ar.add(4);
    ar.add(7);
    Collections.swap(ar,0,2);   //将索引0和2的元素进行交换
    Iterator ite=ar.iterator();
    while(ite.hasNext())
    {
    System.out.println(ite.next());
    }
}

② 填充:Collections.fill(List list, Object obj)

public static void main(String[] args)
{
    ArrayList<Integer> ar=new ArrayList();
    ar.add(5);
    ar.add(4);
    ar.add(7);
    Collections.fill(ar,10);   //将集合内元素变成10
    Iterator ite=ar.iterator();
    while(ite.hasNext())
    {
    System.out.println(ite.next());
    }
}

3、使集合不可变

public static void main(String[] args)
{
    ArrayList<Integer> ar=new ArrayList();
    ar.add(5);
    ar.add(4);
    ar.add(7);
    Collection cc=Collections.unmodifiableCollection(ar);   
    //将集合不可变并返回一个集合cc,此时cc不能执行任何变更    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值