java零散笔记(一)——集合类

Collection 接口。

List集合
List接口,继承Collection接口,因此包含Collection中的所有方法;此外,List接口还定义了两个非常重要的方法:
get(int index):获得指定索引位置的元素。
set(int index,Object obj):将集合中指定索引的对象修改为指定的对象。

List 接口的实现类有ArrayList与LinkedList。
其中ArrayList类实现了可变数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢。
LinkedList类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对像,需要向集合中插入、删除对象时,使用LinkedList类实现List集合的效率较高;但对于随机访问集合中的对象,使用LinkedList类实现List类集合效率较低。
(与数组相同,集合的索引也是从0开始)

Set集合继承Collection集合(不重复,不排顺序)

Set接口的实现类有HashSet类和TreeSet类。

HashSet类实现Set接口,由哈希表支持。它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
HashSet特点:

1:HashSet 不是同步的,如果多个线程同时访问一个HashSet,如果有2条或者2条以上线程
同时修改了HashSet集合,必须通过代码来保证同步。

2:HashSet不能保证元素的排列顺序,顺序可能有变化。

3:集合元素值可以是null

TreeSet类不仅实现了Set接口,还实现了java.util.SortedSort接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可按照指定比较器递增排序,既可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
其中,TreeSet类中新增的方法:
first():返回此Set中当前第一个元素;
last():返回此Set中当前最后一个元素;
comparator()返回对此Set中的元素进行排序的比较器。如果此Set使用自然顺序,则返回null;
headSet(E toElement):返回一个新的集合,新集合包含toElement(不包含)之前的所有对象;
subSet(E fromElement,E fromElement):返回一个新的集合,包含fromElement(包含)对象与fromElement(不包含)对象之间的所有对象;
taliSet(E fromElement)返回一个新的Set集合,新集合包含对象fromElement(包含)之后的所有对象。

Map集合没有继承Collection接口

Map接口提供了将key映射到值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个值。
常用方法:
put(K key,V value):向集合添加指定的key与value的映射关系;
containsKey(Object key):如果此映射包含指定的key的映射关系,则返回true;
containsValue(Object Value):如果此映射将一个或多个key映射到指定值,则返true;
get(object key):如果存在指定的key对象,则返回该对象对应的值,否则返回null;
keySet():返回该集合中所有key对象所形成的Set集合;
values():返回该集合中所有值对象形成的Collection集合;

Mao接口的实现类
HashMap类于TreeMap类;
HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速的查找,此类不保证映射顺序,特别是它不保证该顺序恒久不变。

TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此集合有一定的顺序,不允许对象是null;

遍历集合可以用forerach,例如:

package demo_1;

import java.util.Collection;
import java.util.HashSet;

public class Foreach {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Collection books = new HashSet();
        books.add(new String ("当兵"));
        books.add(new String("军训"));
        books.add(new String("召号在前方"));
        boolean bo = books.add(new String("军训"));//HashSet不允许重复对象
        for(Object obj : books){
            String book = (String)obj;
            System.out.println(book);
            if(book.equals("军训")){
                //下面代码会引发ConcurrentModificationException异常
                //books.remove(book);


            }
        }
        System.out.println(books);
        System.out.println(bo);
    }

}

也可用迭代器:
利用Iterator 迭代器来遍历集合:

package demo_1;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class Die {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //创建一个集合
        Collection books = new HashSet();
        books.add("打起精神");
        books.add("强健体魄");
        books.add("报效祖国");
        //获取books 集合的迭代器
        Iterator it = books.iterator();
        while(it.hasNext()){
            //it.next()方法返回数据的是object类型,需要强制类型转换
            String book  = (String)it.next();
            System.out.println(book);
            if(book.equals("强健体魄")){
                //从集合
                it.remove();
                /*books.remove(book);//在多线程编程时尤其容易发生错误:
                程序的一条线程正在迭代访问Collection集合元素时,
                另一条线程修改了Collection集合,这就导致发生异常
                */
            }

            book = "测试字符串";
        }
        System.out.println(books);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值