ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

对象持有-容器

2022-02-20 14:31:06  阅读:159  来源: 互联网

标签:容器 iterator 对象 void outStack private 持有 add stringList


一、容器

  • 容器包含集合以及数组,是用来保存对象的引用
  • 数组:固定长度的,保存基本类型的字面量和引用类型的引用
  • 集合:可变长度,保存饮用类型的引用

1. 集合

  • 集合的范型:可以存储与定义的类及其子类
  • 创建时: 使用向上转型的方式,方便后续代码修改具体的实现类
  • 创建时:如果要使用到具体类的某些方法时候,不要采用向上转型
  • 容器重写了toString,提供默认的输出方式

2. 常见方法

    private static void method01() {
        /*Arrays:
         * 1. 参数为一个可变参数
         * 2. 返回值:名字为ArrayList的类,是 Arrays的静态内部类
         * 3. 得到的list不能add或者remove,因为内部类中没有实现,
         *    UnsupportedOperationException*/
        List<String> stringList = Arrays.asList("FIRST", "SECOND", "THIRD");
        List<Integer> integerList = Arrays.asList(new Integer[]{1, 23, 43});
        System.out.println(stringList);
    }

    private static void method02() {
        /*Collections.addAll()
         * 1. 参数1: 集合, 参数2: 可变参数
         * 2. 返回值为是否添加成功, 只要成功添加一个元素,结果就为true
         * 3. 向参数1中的集合,添加一定的元素*/
        Collection<String> stringList = new HashSet<>();
        stringList.add("FIRST");
        stringList.add("SECOND");
        boolean b = Collections.addAll(stringList, "FOURTH", "FIVE", "FIRST");
        System.out.println(b);
        System.out.println(stringList);
    }

    private static void method03() {
        Collection<String> stringList = new HashSet<>();
        stringList.add("FIRST");
        stringList.add("SECOND");

        Collection<String> secondList = new HashSet<>();
        stringList.add("first");
        stringList.add("second");
        /* Collection.addAll()
        *  1. 合并两个集合*/
        boolean b = stringList.addAll(secondList);
    }

3. List

  • ArrayList: 随机访问快,中间插入慢
  • LinkedList: 随机访问慢,中间插入快
  • 并不代表哪个一定好,除非成为性能瓶颈,否则不要优化

4. 迭代器

  • 一种设计模式,不关系容器的具体类型,只关系容器内部保存的数据
/*不关心容器的类型,而只关心容器内存储的数据
     * 迭代器统一了对容器的访问方式*/
    private static <E> void method01(Collection<E> collection) {
        /*获取到一个迭代器*/
        Iterator iterator = collection.iterator();

        while (iterator.hasNext()) {
            E next = (E) iterator.next();
            System.out.println(next);
            /*将集合中的元素移除*/
            iterator.remove();
        }

        System.out.println(collection);
    }

    /*ListIterator: 继承Iterator,可以两边进行遍历*/
    private static <E> void method02(List<E> list) {
        ListIterator<E> iterator = list.listIterator();

        while (iterator.hasNext()) {
            E next = iterator.next();
            System.out.println(next);
        }

        while (iterator.hasPrevious()) {
            E previous = iterator.previous();
            System.out.println(previous);
        }
    }

5. Stack

  • FILO: 可以通过Stack来实现一个队列
package com.erick;

import java.util.Stack;

/*用栈实现队列
 * 1. 用两个栈来实现一个队列
 * 2. 输入栈,输出栈,栈:可以用jdk中提供的stack类*/
public class Demo03 {

}

class ErickQueue<E> {

    private Stack<E> inStack = new Stack<>();
    private Stack<E> outStack = new Stack<>();

    public ErickQueue() {
    }

    public void push(E e) {
        inStack.push(e);
    }

    public E pop(E e) {
        if (outStack.isEmpty()) {
            fromInToOut();
        }
        return outStack.pop();
    }

    /*peek: 返回队列开头的元素*/
    public E peek() {
        if (outStack.isEmpty()) {
            fromInToOut();
        }
        return outStack.peek();
    }

    /*empty:  判断队列是否为空*/
    public Boolean empty() {
        if (inStack.isEmpty() && outStack.isEmpty()) {
            return true;
        }

        return false;
    }

    private void fromInToOut() {
        for (E e : inStack) {
            outStack.push(e);
        }
    }

}

6. Set

  • Set就是Collection, 没有增加任何新的功能
  • HashSet: 使用散列链表,没有顺序
  • TreeSet: 使用红黑树,带顺序

7. Queue

  • FIFO
  • LinkedList可以作为 Queue 的具体实现

标签:容器,iterator,对象,void,outStack,private,持有,add,stringList
来源: https://blog.csdn.net/weixin_43374578/article/details/123029441

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有