java集合学习笔记

集合是用来存放对象的容器

一、Collection 接口:

最基本的集合接口,定义了集合中共通的方法,Java中没有定义直接继承自Collection的类,只提供其子接口(如List和set)。

Collection 集合中常用的方法

Collection collection = new ArrayList();

添加

collection.add(Object e); //向集合中添加一个元素

collection.addAll(Collection  c)     //将一个集合添加到另外一个集合中

删除

collection.remove(Object e)    //删除集合中的指定元素

collection.removeAll(Collection<?> c )  //删除集合中的某个集合中的所有元素

判断

collection.contains(Object o)     //判断集合中是否存在某个元素

collection.size();  //判断集合大小

collection.isEmpty(); //判断集合是否为空

获取

利用增强for循环

for(Object obj : collection){

    Systerm.out.println(obj)

}

利用Iterator迭代器

Iterator iterator = collection.iterator(); //获取集合中的对象

while(iterator.hasnext()){

Object obj = iterator.next();

Systerm.out.println(obj)

}

二、Iterator 迭代器

不同的集合有不同的数据结构,集合利用其内部类来获取集合中的元素(内部类可以直接操作集合中的对象)

所有内部类都是实现了Iterator接口的内部类,在Iterator接口中定义了集合获取元素的共通方法。

Iterator iterator = collection.iterator(),iterator()方法返回的是一个内部类对象,而这个内部类实现了Iterator 接口,所有返回的是Iterator 类型。这个内部类对象提供了如下方法

iterator.hasNext()  // 判断集合中是否还有对象

iterator.next() //获取一个对象

我们就可以利用迭代器来遍历集合。

三、List(Collection接口的子接口):

List 存储的对象是有序的,可以重复的

List的实现类:

除了继承的父类方法外,还定义了可以操作集合索引的特殊方法

add(int index,Object e)   //向集合中指定索引位置插入一个元素(注意选取适当的索引位置,否定报错)

addAll(int index,Collection  c)   //向集合中指定索引位置插入另外一个集合中的所有元素

remove(int index)    //删除集合中指定索引位置的元素

set(int index,Object e) //修改集合中指定索引位置的元素

get(int index) //查询集合中指定索引位置的元素

List迭代器Listiterator:提供了更多的方法,并且实现了在迭代过程中实现对集合的增删改

LinkedList:底层使用的数据结构是链表,线程不安全的,查找速度慢,增删速度快。

LinkedList中定义了其特有的方法:

LinkedList list = new LinkedList();

在集合的头部添加元素

list.addFirst(Object e)  

list.offerFirst(Object e

在集合的末尾添加元素

list.addLast(Object e)  

list.offerLast(Object e)

删除集合头部元素

list.removeFirst(Object e) //删除的对象不存在,发生异常

list.pollFist(Object e)   ///删除的对象不存在,返回null

list.removeLast(Object e)  //删除集合尾部元素

list.pollLast(Object e)

查找集合头部元素

list.getFirst()    //获取的对象不存在,会抛出异常

list.peekFirst()      //获取的对象不存在,返回null

查找集合尾部元素

list.getLast()   //获取的对象不存在,会抛出异常

list.peekLast()   //获取的对象不存在,返回null

LinkedList 还可以实现先进先出和先进后出

队列(先进先出)

栈(先进后出)

LinkedList实现队列或者栈:

class MyQueue{
        private LinkedList list;
        public MyQueue(){
            list = new LinkedList();
        }
        public void in(Object obj){
            list.addLast(obj);
        }
        public Object out(){
            return list.removeFirst();
            //return list.removeLast();  实现栈
        }
        public boolean isNull(){
            if (list.isEmpty()){
                return true;
            }else {
                return false;
            }
        }
    }
MyQueue myQueue = new MyQueue();
myQueue.in("11");
myQueue.in("22");
myQueue.in("33");
while (!myQueue.isNull()){
    System.out.println(myQueue.out());
}

ArrayList:底层使用的数据结构是数组,线程不安全的,查找速度快(存放位置在内存中是连续的),增删速度慢

public static ArrayList removeSame(ArrayList list){
   ArrayList list2 = new ArrayList(); 
   for (int i =0;i<list.size();i++) { 
       if (!list2.contains(list.get(i))) {
          list2.add(list.get(i)); 
        } 
   }
  return list2
}

Vector:底层使用的数据结构是数组,线程安全的,查找速度快(存放位置在内存中是连续的),增删速度慢,早期使用,已经被

ArrayList替代。

四、Set

set存储的对象是无序的,不可以重复的

hashset 底层使用的数据结构是hash表,线程不安全的

保证对象的唯一性方式:int hashoCde()    boolean equals(Object obj)

在添加对象时,先用对象的hash值与集合中原因对象的hash值进行比较,如何相同则再调用equals方法对hash值相同的两个对象进行比较,如何equals方法返回true,认为是同一对象,不加入集合。

TreeSet 底层使用的数据结构是二叉树。线程不安全的

TreeSet 在使用add方法添加对象时,会对对象进行排序,实现类comparable 接口中的int compareTo()方法 ,依据该方法返回值大小进行排序,当返回值为0时,表示对象相同,不添加。

猜你喜欢

转载自blog.csdn.net/Forever_and_ever/article/details/82624817