Java基础提高篇(三)持有对象

1.添加一组元素

通过Arrays.asList()或者Collections.addAll()添加一组元素

Arrays.asList()方法接收一个数组或一个用逗号分隔的元素列表

Collections.addAll(),接收一个Collection对象,以及一个数组或一个用逗号分隔的元素列表(推荐使用这种方法)

public class Demo1 {
    public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3);
        System.out.println(list1); // [1,2,3]
        // list1.add(4); 报错java.lang.UnsupportedOperationException
        // 因为Arrays.asList底层是数组,数组大小无法改变
        list1.set(1, 4);   // 修改数据
        System.out.println(list1); // [1,4,3]

        Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3));
        Collections.addAll(collection, 4, 5, 6);
        System.out.println(collection);// [1, 2, 3, 4, 5, 6]

        Integer[] integers = { 7, 8, 9 }; 
        Collections.addAll(collection, integers);
        System.out.println(collection);  // [1, 2, 3, 4, 5, 6, 7, 8, 9]

    }
}

2.List,Set,Map的区别

先看一个小例子

class NBA{
    static Collection<Object> fill(Collection<Object> collection){
        collection.add("火箭");
        collection.add("骑士");
        collection.add("马刺");
        collection.add("马刺");
        return collection;
    }
    static Map fill(Map<String, String> map){
        map.put("hj","火箭"); 
        map.put("qs","骑士"); 
        map.put("mc","马刺"); 
        map.put("mc","马刺"); 
        return map;
    }
}

public class Demo1 {
    public static void main(String[] args) {

  System.out.println(NBA.fill(new ArrayList<>()));  //[火箭, 骑士, 马刺, 马刺]
  System.out.println(NBA.fill(new LinkedList<>()));  //[火箭, 骑士, 马刺, 马刺]

  System.out.println(NBA.fill(new HashSet<>()));   //[马刺, 火箭, 骑士]
  System.out.println(NBA.fill(new LinkedHashSet<>()));  // [火箭, 骑士, 马刺]
  System.out.println(NBA.fill(new TreeSet<>()));// [火箭, 马刺, 骑士]

  System.out.println(NBA.fill(new HashMap()));   // {mc=马刺, hj=火箭, qs=骑士}
  System.out.println(NBA.fill(new LinkedHashMap())); // {hj=火箭, qs=骑士, mc=马刺}
  System.out.println(NBA.fill(new TreeMap()));  // {hj=火箭, mc=马刺, qs=骑士}
    }
}

List:以特定的顺序保存元素

List有二种类型:

1.ArrayList:擅长随机访问元素,但是在List中间插入和移除元素比较慢

2.LinkedList:擅长在List中间插入和移除元素,但随机访问元素慢

Set:元素不能重复

Map:在每个槽内保存了二个对象,即键与之相关联的值。

HashSet使用了相当复杂的方式存储元素,它是最快获取元素的方式。

TreeSet:按照比较结果的升序保存对象

LinkedHashSet:按照被添加的顺序保存对象

HashMap,LinkedHashMap,TreeMap和Set相类似。

迭代器

Java的Iterator只能单向移动,用于遍历数据

ListInterator是可以双向移动的

public class Demo1 {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3);
        // 1.获得Iterator对象
        Iterator<Integer> iterator = list.iterator();
        // 检查序列中是否还有元素
        while (iterator.hasNext()) {
            // 获取序列中的下一个元素
            Integer value = iterator.next();
            System.out.println(value);
        }
        System.out.println("---------------");
        // 用foreach更简单
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }
}

LinkedList常用方法

1.getFirst()和element() 返回第一个元素,并不移除,如果List为空,抛出NoSuchElementException.peek()在列表为空时,返回null

2.removeFirst和remove,移除并返回列表的头,而在列表为空时抛出NoSuchElementException.poll()在列表为空时,返回null

3.addFirst(),add(),addLast(),都将某元素插入到列表的头尾。

4.removeLast()移除并返回列表的最后一个元素。

栈与队列

栈是一种后进后出的容器。而队列是一种先进先出的容器。LinkedList拥有各种栈与队列的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值