zoukankan      html  css  js  c++  java
  • List 接口常用子类及其特点

    List 常用子类:

    - Vector: 内部是数组数据结构,是同步的. 增删, 查询都很慢
    - ArrayList: 内部是数组数据结构,是不同步的,替代了 Vector,不同步的效率较高. 特点: 查询速度快
    - LinkedList: 内部是链接列表实现,链表数据结构,是不同步的,有角标. 特点: 增删元素的速度很快
    

    Vector (了解)

    • 取出元素的特有方法: Enumeration elements();
    Vector v = new Vector();
    
    v.addElement("abc1");
    v.addElement("abc2");
    v.addElement("abc3");
    
    Enumeration en = v.elements();
    while(en.hasMoreElements()){
        System.out.println(en.nextElement());
    }
    

    备注: Enumeration 接口和 Iterator 接口的功能是重复的, 新的实现优先考虑 Iterator 接口.

    LinkedList

    • 操作列表的开头和结尾
    addFirst(); : 将指定元素添加到列表的开头
    addLast();  : 将指定元素添加到列表的结尾
    
    getFirst(); : 获取列表的第一个元素, 但不移除. 如果链表为空,抛出 NoSuchElementException 异常
    getLast();  : 获取列表的最后一个元素, 但不移除. 如果链表为空,抛出 NoSuchElementException 异常
    
    removeFirst(); : 获取列表的第一个元素, 但移除. 如果链表为空,抛出 NoSuchElementException 异常
    removeLast();  : 获取列表的最后一个元素, 但移除. 如果链表为空,抛出 NoSuchElementException 异常
    
    // JDK 1.6 以后升级
    
    offerFirst(); : 将指定元素添加到列表的开头
    offerLast();  : 将指定元素添加到列表的结尾
    
    peekFirst(); : 获取列表的第一个元素, 但不移除. 如果链表为空,返回 null
    peekLast();  : 获取列表的最后一个元素, 但不移除. 如果链表为空,返回 null
    
    pollFirst(); : 获取列表的第一个元素, 但移除. 如果链表为空,返回 null
    pollLast();  : 获取列表的最后一个元素, 但移除. 如果链表为空,返回 null
    
    • 练习: 请使用 LinkedList 来模拟一个堆栈或者队列数据结构
    // 分析:
    // 堆栈: 先进后出, First in Last Out, 简写为 FILO
    // 队列: 先进先出, First in First Out, 简写为: FIFO.  (例如排队)
    
    // 我们应该描述这样一个容器, 给使用者提供一个容器对象完成这两种结构中的一种.
    
    class DuiLie {
        private LinkedList link;
    
        // 构造函数
        public DuiLie(){
        link = new LinkedList();
    }
    
        // 队列添加元素的功能
        public void myAdd(Object obj){
        link.addLast(obj);
    }
    
        public void myGet(){
        return link.removeFrist();
    }
    
        public boolean isNull(){
        return link.isEmpty();
    }
    
    }
    

    ArrayList

    • 存储自定义对象
    // 自定义 Person 对象
    public class Person {
        private String name;
        private int age;
    
        public Person(){
            super();
        }
    
        public Person(String name, int age){
            super();
            this.name = name;
            this.age = age;
        }
    
        public String getName(){
            return name;
        }
    
        public void setName(String name){
            this.name = name;
        }
    
        public void getAge(){
            return age;
        }
    
        public void setAge(int age){
            this.age = age;
        }
    }
    
    // ArrayList 集合中存储自定义对象 Person
    public class ArrayListTest {
        public static void main(String[] args){
    
            ArrayList al = new ArrayList();
    
            al.add(new Person("lisi1",21));
            al.add(new Person("lisi2",22));
            al.add(new Person("lisi3",23));
            al.add(new Person("lisi4",24));
    
            Iterator it = al.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
    }
    }
    
    // 输出结果为:
    // cn.itcast.p.bean.Person@7852e922
    // cn.itcast.p.bean.Person@4e25154f
    // cn.itcast.p.bean.Person@70dea4e
    // cn.itcast.p.bean.Person@5c647e05
    
    // 原因分析: add(Object obj); Person 对象存入 ArrayList 集合中,向上转型(多态)
    // 直接 it.next().getName(); 错误, 因为 Object 对象没有 getName() 方法
    
    // 升级:
    Iterator it = al.iterator();
    while(it.hasNext()){
        Person p = (Person)it.next(); // 向下转型
        System.out.println(p.getName()+" : " + p.getAge());
    }
    
    

    ArrayList 集合中存储的是 Person 对象的引用

    其他: ArrayList 集合不能存储基本数据类型

    al.add(5); // 代表着: al.add(new Integer(5)); 自动装箱
               // add() 方法的元素为 Object, Object obj = new Integer(5); 多态
    


    _参考资料_ - [JavaSE 基础视频(毕向东)](https://www.bilibili.com/video/av3113337/index_1.html#page=15) - [JDK 1.6 中文文档](http://tool.oschina.net/apidocs/apidoc?api=jdk-zh)
  • 相关阅读:
    Qt Quick之QML与C++混合编程详解
    Qt QML与C++混合编程
    Qt QML和QtQuick简介以及QML实例
    Qt 渐变 QLinearGradient、 QConicalGradient、QRadialGradient
    Qt 加载HeightMap(高度图)构造3D地形图
    VisionPro内嵌脚本编译时显示:未定义类型“CogFindCircleTool”。未定义类型“CogToolResultConstants”
    VisionPro CogPMAlignTool
    VisionPro 卡尺原理
    VisionPro 卡尺测量长度的例子
    VisionPro 自学帮助
  • 原文地址:https://www.cnblogs.com/linkworld/p/7493349.html
Copyright © 2011-2022 走看看