集合框架笔记

集合类:(容器)
 集合数组的区别和特点:
  1.数组和集合:都是存储容器
  2.集合(可变长度)是存储对象的,只能存数对象,可以存储不同类型的对象.
  3.数组(固定长度)一般存储数据,同一种类型的数据.
  
 集合的种类:
  1.List(元素都带有角标)
  
   ListIterator是List特有的迭代器,是Iterator的子接口.
   在迭代时,不可以通过集合中的方法来操作集合中的元素,会发生并发异常.
   所以在迭代时,只能用迭代的方法.而Iterator的方法有限,只能进行删除,判断取出的操作,
   想对元素进行添加,修改的时候,就需要其子接口ListIterator的方法来获取.

迭代器代码演示:

/*
取出元素:
迭代器:Iterator

*/

import java.util.*;

class IteratorDemo
{
    public static void main(String [] args)
    {
        getElement();
    }
    
    public static void getElement()
    {
        ArrayList al1 = new ArrayList();
        
        al1.add("java01");
        al1.add("java02");
        al1.add("java03");
        al1.add("java04");    
    
        Iterator it = al1.iterator();
        while(it.hasNext())
        {
            sop(it.next());
        }
    }

    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    
    
}

   
   常见的3个子类:(常见面试问题)
   ArrayList: 底层的数据结构使用的是 数组结构;  特点:查询速度快,但是增删较慢. (线程不同步)
   LinkedList: 底层使用的是 链表结构; 特点:增删速度快,查询慢.
   Vector: 底层是数组数据结构.与ArrayList功能一样.(vector线程是同步的),被ArrayList替代了.
   
   List集合判断元素是否相同.依据的元素的equals方法.(其他集合跟List不同),contains底层调用的是equals方法.

相关代码及练习:

Vector:

import java.util.*;

/*
枚举与迭代其实是一样的.

*/



class VectorDemo
{
    public static void main(String [] args)
    {
        Vector v = new Vector();
        
        v.add("java01");
        v.add("java02");
        v.add("java03");
        v.add("java04");
        
        Enumeration en = v.elements();
        while(en.hasMoreElements())
        {
            System.out.println(en.nextElement());
        }
    }

}

  ArrayList:

/*
去除ArrayList中的重复元素.

*/

import java.util.*;

class ArrayListTest
{
    public static void main(String [] args)
    {
        ArrayList al = new ArrayList();
        
        al.add("java01");
        al.add("java01");
        al.add("java01");
        al.add("java02");
        al.add("java01");
        al.add("java03");
        
        sop("原集合 : "+al);
        
        /*
        //遍历原集合
        Iterator it = al.iterator();
        
        while(it.hasNext())
        {
            sop(it.next());
        }
        */
        
        //调用方法去除重复元素.
        al = singleElement(al);
        
        sop(al);
        
    }
    
    public static ArrayList singleElement(ArrayList al)
    {
        ArrayList newAl = new ArrayList();
        
        Iterator it = al.iterator();
        
        while(it.hasNext())
        {
            Object obj = it.next();
            if(!newAl.contains(obj))
            {
                newAl.add(obj);
            }
        }
        
        return newAl;
        
    }
    
    
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    
    
}
/*
将自定义对象存储到ArrayList中,并去除相同元素.
例如:存人对象,同姓名,同年龄视为同一个人.

思路:
1.定义人对象
2.定义集合容器
3.对比


*/


import java.util.*;

class Person
{
    private String name;
    private int age;
    
    Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
    public boolean equals(Object obj)
    {
        if(!(obj instanceof Person))
            return false;
        
        Person p = (Person)obj;
        
        System.out.println(this.name+"-----"+p.name);
        
        return this.name.equals(p.name) && this.age == p.age;
        
    }
    
    public void setName()
    {
        this.name = name;
    }
    
    public void setAge()
    {
        this.age = age;
    }
    
    public String getName()
    {
        return name;
    }
    
    public int getAge()
    {
        return age;
    }
     
}


class ArrayListTest2
{
    public static void main(String [] args)
    {
        ArrayList al = new ArrayList();
        
        al.add(new Person("lisi01",30)); //al.add(Object obj)  Object obj = new Person("lisi01",30); 向上转型. 
        al.add(new Person("lisi02",31));
    //    al.add(new Person("lisi02",31));
        al.add(new Person("lisi03",32));
        al.add(new Person("lisi04",33));
    //    al.add(new Person("lisi04",33));
        
        
    //    al = singleElement(al);
        
        sop("remove 03 :"+al.remove(new Person("lisi03",32)));  //remove底层也是调用的equals方法.
        
        Iterator it = al.iterator();
        
        while(it.hasNext())
        {
            /*
            Object obj = it.next();
            Person p =(Person)obj;
            */
            Person p = (Person)it.next();
            sop(p.getName()+"-----"+p.getAge());
        }
        
    }
    
    public static ArrayList singleElement(ArrayList al)
    {
        ArrayList newAl = new ArrayList();
        
        Iterator it = al.iterator();
        while(it.hasNext())
        {
            Object obj = it.next();
            if(!newAl.contains(obj))
            {
                newAl.add(obj);
            }
        }
        return newAl;
        
    }
    
    
    
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    
}

LinkedList:

/*
LinkedList

如果集合中没有元素,会出现NoSuchElememtException异常
在JDK1.6中提供了新的方法来替代
offerFirst();
offerLast();

peekFirst();
peekLast();

pollFirst();
pollLast();
*/

import java.util.*;

class LinkedListTest
{
    public static void main(String [] args)
    {
        LinkedList link = new LinkedList();
        /*
        link.addFirst("java01");
        link.addFirst("java02");
        link.addFirst("java03");
        link.addFirst("java04");        
        */
        link.addLast("java01");
        link.addLast("java02");
        link.addLast("java03");
        link.addLast("java04");    
        
        sop(link);
        
        while(!link.isEmpty())
        {
            sop(link.removeFirst());
        }
        
        
    }
    
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    
}


  2.Set
  3.Map


  
 特性:
 
 集合框架:
  顶层: Colletion(接口)
基本方法演示:

/*
集合框架

1.add方法的参数类型是Object.以便于接收任何类型
2.集合中存储的都是对象的引用(地址值).


*/

import java.util.*;

class CollectionDemo
{
    public static void main(String [] args)
    {
        method_2();
        
    }
    
    public static void method_2()
    {
    
        ArrayList al1 = new ArrayList();
        
        al1.add("java01");
        al1.add("java02");
        al1.add("java03");
        al1.add("java04");    
        
        ArrayList al2 = new ArrayList();
        
        al2.add("java01");
        al2.add("java02");
        al2.add("java05");
        al2.add("java06");
        
        al1.retainAll(al2); //al1中存放的是与al2中的交集的部分. 没有交集的话al1是空集 显示的结果为[].
        
        //al1.removeAll(al2); //将al1与al2中相同的删除.在al1中显示的去除与al2相同的元素.
        
        sop("al1 : "+al1);
        sop("al2 : "+al2);
        
        
        
    }

    public static void base_method()
    {
        //创建一个集合容器,使用Collection接口的子类,ArrayList创建.
        ArrayList al = new ArrayList();
        
        //给容器添加元素
        al.add("java01");
        al.add("java02");
        al.add("java03");
        al.add("java04");
        
        //打印原集合
        sop("原集合 : "+al);
        
        //获取集合长度,个数  用size();  而非length();
        sop("size : "+al.size());
        
        //清空集合 clear()
        //al.clear();
        
        //删除元素 remove();
        al.remove("java02");
        
        //判断元素
        sop("java01是否存在:"+al.contains("java01"));
        
        sop("集合是否为空 : "+al.isEmpty());
        
        sop(al);
        
        
        
    }
    
    
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    
}


   常见子接口: List Set
   
 Q:为什么出现这么多容器:
  A:每个容器对数据的存储方式都不同,这个存储方式可以称为:数据结构.
  
 
 迭代器:Iterator.(取出元素并操作元素)
 返回值类型是一个接口.
 next();方法
 hasNext();
 remove();
 
  Collection
   1.List 元素是有序的,可以重复,该集合体系有索引
   
   2.Set 元素是无序的,元素不可以重复,没有索引.
   
   List集合特有方法:
    1.指定位置插入元素

原文地址:https://www.cnblogs.com/jerryho/p/4750048.html