集合框架笔记

集合类 :( 容器 )
 
集合数组的区别和特点 :
  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); //al1al2中相同的删除.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.
指定位置插入元素

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务