JAVA容器类库

1、数组将数字与对象联系起来,保存类型明确的对象,查询对象时不需要对结果进行转换,可以是多维的,可以保存基本类型数据。但是数组一旦生成,其容量就不能再改变。
2、JAVA提供了集合类来解决这个问题,其中基本的类型有List、Set、Queue、Map四种,List、Set、Queue继承了Collection接口保存单一的元素,而Map保存相关联的键值对。使用Java泛型就可以指定容器中存放的对象类型,当向集合类对象中添加元素时,就可以自动调整其尺寸。容器不能持有基本类型,但是自动包装机制会进行自动转换。
3、如果要进行大量的随机访问,就使用ArrayList;如果经常从表中插入删除元素,就使用LinkedList。
ArrayList增删查改如下所示

public class ListTest {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
        System.out.println(list);
        list.add(6);
        System.out.println(list.contains(6));
        int num = list.get(2);
        System.out.println(num);
        System.out.println(list.indexOf(num));
        List<Integer> sub = list.subList(1,4);
        System.out.println(sub);
        System.out.println(list.containsAll(sub));
        list.removeAll(sub);
        System.out.println(list);
    }
}/*output
[1, 2, 3, 4, 5]
true
3
2
[2, 3, 4]
true
[1, 5, 6]
*/

4、LinkedList实现了栈,可以直接作为栈使用,出栈、入栈、取栈顶元素的操作如下所示。

public class StackTest {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1,2,3,4,5,6);
        LinkedList<Integer> list2 = new LinkedList<Integer>(list1);
//        System.out.println(list1);
        System.out.println(list2);
        list2.addFirst(7);
        System.out.println(list2);
        list2.addFirst(8);
        System.out.println(list2);
        int top = list2.getFirst();
        System.out.println(top);
        System.out.println(list2);
        int top1 = list2.removeFirst();
        System.out.println(top1);
        System.out.println(list2);
        System.out.println(list2.isEmpty());
    }
}/*output
[1, 2, 3, 4, 5, 6]
[7, 1, 2, 3, 4, 5, 6]
[8, 7, 1, 2, 3, 4, 5, 6]
8
[8, 7, 1, 2, 3, 4, 5, 6]
8
[7, 1, 2, 3, 4, 5, 6]
false
*/

5、LinkedList还实现了Queue接口,因此可以作为队列的一种实现,出队、入队、取队头元素的操作如下所示。

public class QueueTest {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<Integer>();
        Random rand = new Random(47);
        for(int i=0; i < 10; i++) {
            q.offer(rand.nextInt(i + 10));
        }
        System.out.println(q);
        q.offer(5);
        System.out.println(q);
        int top = q.peek();
        System.out.println("top=" + top + "q=" + q);
        int top1 = q.poll();
        System.out.println("top=" + top + "q=" + q);
    }
}/*
[8, 1, 1, 1, 5, 14, 3, 1, 0, 1]
[8, 1, 1, 1, 5, 14, 3, 1, 0, 1, 5]
top=8  q=[8, 1, 1, 1, 5, 14, 3, 1, 0, 1, 5]
top=8  q=[1, 1, 1, 5, 14, 3, 1, 0, 1, 5]
*/

peek()与element()都将在不移除的情况下返回队头,但是peek方法在队列为空的时候返回null,element方法在队列为空的时候抛出异常。pool()和remove()会移除队头元素并且返回,但是pool方法会在队列为空时返回null,remove方法会在队列为空时抛出异常。
6、Map是将对象与对象相关联的设计。HashMap用于快速访问,TreeMap保持键始终处于排队状态,LinkedHashMap保持元素的插入顺序,但也通过散列提供了快速访问能力。Map的增删查改操作如下所示。

public class MapTest {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<String,String>();
        map.put("China","Beijing");
        map.put("Janpan","Tokyo");
        System.out.println(map);
        String str = map.get("China");
        System.out.println(str);
        map.put("Janpan","dongjing");
        System.out.println(map);
        Set<String> key = map.keySet();
        System.out.println(key);
        Collection<String> values = map.values();
        System.out.println(values);
        map.remove("Janpan");
        System.out.println(map);
    }
}/*output
{China=Beijing, Janpan=Tokyo}
Beijing
{China=Beijing, Janpan=dongjing}
[China, Janpan]
[Beijing, dongjing]
{China=Beijing}
*/

7、Set不接受重复元素。HashSet用于快速访问,TreeSet保持键始终处于排队状态,LinkedHashSet保持元素的插入顺序。Set的增删查改操作如下所示。

public class SetTest {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        set.addAll(Arrays.asList("A B C D A".split(" ")));
        System.out.println(set);
        Boolean flag = set.contains("A");
        System.out.println(flag);
        set.remove("A");
        System.out.println(set);
        System.out.println(set.contains("A"));
        set.add("E");
        set.add("Q");
        System.out.println(set);
    }
}/*output
[A, B, C, D]
true
[B, C, D]
false
[Q, B, C, D, E]
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值