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

来源:互联网 发布:热血传奇网络加速器 编辑:程序博客网 时间:2024/06/14 20:30

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拥有各种栈与队列的行为。

0 0