容器

2018-11-01  本文已影响0人  云木杉

数组

数组的储存方式在内存的地址是连续的,大小固定,一旦分配不能被其他引用占用。它的特点是查询快,增删慢。
链表的存储方式是非连续的,大小不固定,特点与数组相反,插入和删除快,查询速度慢。

数组的特点

链表的特点

长度固定 与其他容器之间的区别:效率 类型和保存基本类型的能力 效率最高的存储和随机访问对象引用序列的方式。

  int[] arr = {1, 2, 3, 4, 5};
  int[] arr2;
  arr2 = arr;

  for (int i = 0; i < arr2.length; i++) {
     arr2[i] = arr2[i] + 1;
  }

  for (int i = 0; i < arr.length; i++) {
     Logger.v("arr[" + i + "] = " + arr[i]);
       // 2,3,4,5,6
   }

持有对象

在任何时刻任何位置创建任何数量的对象。

Collection 一个独立元素的序列

  • int size() 返回collection的元素数,如果大于Inter.MAX_VALUE,则返回Inter.MAX_VALUE;
  • boolean isEmpty 如果collection不包含元素,返回true
  • boolean contains(Object obj) 如果collection包含指定的元素,则返回true
  • boolean add(E a);
  • boolean remove(Object o);
  • void clear();

List 必须按照插入的顺序保存元素

ArrayList 用户进行大量的随机访问。

LinkList是栈实现,双链表结构, 经常实现插入删除数据
ArrayList实现动态数组的数据结构, 可以实现大量的随机访问

LinkedList 栈实现 用于经常从表中间插入或删除元素

Set 不能有重复元素 主要使用contains()测试Set的归属性。

Map 一组成对儿的“键值对”对象

HashMap 初始容量和负载因子

 Random random = new Random(47);
 Map<Integer, Integer> map = new HashMap<>();
 for (int i = 0; i < 1000; i++) {
        int r = random.nextInt(20);
        Integer fre = map.get(r);
        map.put(r, fre == null ? 1 : fre + 1);
  }
  Logger.v(map + "");

Queue 队列是一个典型的先进先出容器。

       Queue<Integer> mu = new LinkedList<>();
        for (int i = 0; i < 200; i++) {
            // 将指定的元素插入此队列(如果立即可行且不会违反容量限制)
            boolean add = mu.add(i);
            //获取,但是不移除此队列的头。
            Integer element = mu.element();
            //将指定的元素插入此队列(如果立即可行且不会违反容量限制) 此方法通常要优于 add(E),插入队尾。
            boolean offer = mu.offer(i);
            // 获取但不移除此队列的头; 
            Integer peek = mu.peek();
            //获取并移除此队列的头
            Integer poll = mu.poll();
            // 获取并移除此队列的头
            Integer remove = mu.remove();
        }

Arrars

     int[] ints = new int[5];
     Arrays.fill(ints,666);

迭代器 Iterator

 List lm = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
 // 使用iterator()方法要求容器返回一个Iterator
Iterator<Integer> iterator = lm.iterator();

 // 检测序列中是否还有元素
 while (iterator.hasNext()) {
      // 获得序列中下一个元素
      int next = iterator.next();
      Logger.v(next + "");
  }

Stack “栈”是指先进后出的容器

  Stack<String> ms = new Stack<>();
  for (String str: "My dog has fleas".split(" ")) {
        //把项压入堆栈顶部.
        ms.push(str);
        // 移除堆栈顶部的对象,并作为此函数的值返回该对象。
        String pop = ms.pop();
        // 查看堆栈顶部的对象,但不从堆栈中移除它。
        String peek = ms.peek();
        // 测试堆栈是否为空。
        boolean empty = ms.empty();
  }
上一篇 下一篇

猜你喜欢

热点阅读