重温Java基础(七)

1.集合

1.1.集合和数组的区别

  • 数组的长度是固定的,不能再添加元素
  • 集合类的长度是可变的,随着元素的增加而增加
  • 数组能存基本数据类型和 引用数据类型
  • 集合当中只能存放对象,基本数据类型也会自动装箱

1.2.什么时候使用数组,什么时候使用集合类

  • 如果元素的个数是固定的,推荐使用数组
  • 如果元素的个数是不固定的,推荐使用集合

1.3.Collection 集合的接口,add(),remove(),clear(), isEmpty();

  • List(有序)接口,实现类,是可以添加重复元素
  1. ArrayList(内部结构数组),覆盖了toString(),可以直接打印结果。
  2. LinkedList(内部结构链表)
  3. Vector(内部结构数组),jdk1.2并到list的
  • Set(无序)接口,实现类如下,不能添加重复元素
  1. HashSet(内部结构Hash算法)
  2. TreeSet(内部结构二叉树)

1.4.集合的遍历

  • 把集合转化为数组,然后遍历, toArray()会把集合转化为Object数组,自动向上转型
  • 迭代器遍历,Iterator

1.5.集合的常用方法

  • addAll(),把集合合并到一起。
  • removeAll()删除两个集合的交集。
  • containsAll(),判断是否包含整个集合
  • retainAll(),取两个集合的交集 ,boolean res = s.retainAll(t); 集合变化了返回true,否则返回false

1.6.集合Iterator迭代删除,添加元素容易并发异常,需要使用自己的迭代器,listIterator(),list特有的。

1.7.list向前遍历,listIterator.hasPrevious();  listIterator.previous();

1.8.ArrayList和LinkedList

  • ArrayList容量增加50%,查询修改快,添加删除慢
  • LinkedList查询修改慢,添加删除快。特有的方法,addFirst(),removeFirst()...
  • Vector可以用Enumeration遍历,加锁更安全。
Vector v=new Vector();
        Enumeration e=v.elements();
        while (e.hasMoreElements()){
            e.nextElement();
        }

 

1.9.list去除重复的对象,需要重写equals方法。contains方法比较的是对象地址。

2.LinkedList 实现栈的数据结构

class ClassStack {
    LinkedList linkedList;

    ClassStack() {
        linkedList = new LinkedList();
    }

    //入栈
    void push(Object obj) {
        linkedList.addLast(obj);
    }

    //出栈
    void pop(Object obj) {
        linkedList.removeLast();
    }

    @Override
    public String toString() {
        return "ClassStack{" +
                "linkedList=" + linkedList +
                '}';
    }
}

public class TestStack {

    public static void main(String[] args) {
//        Stack stack= new Stack();
//        stack.pop();
        ClassStack stack = new ClassStack();
        stack.push("a");
        stack.push("b");
        stack.push("c");
        System.out.println(stack);

    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章