zoukankan      html  css  js  c++  java
  • 集合框架笔记

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

  • 相关阅读:
    [其他]JAVA与C#的Socket通信
    Ext 向Ext.form.ComboBox()中添加列表的分类
    Extjs tree 过滤查询功能
    Extjs TreePanel API详解
    JVM虚拟机21: 1.8中废弃永久代(PermGen)迎来元空间(Metaspace)
    JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
    Java虚拟机19:再谈四种引用状态
    Java虚拟机18:Java对象大小、对象内存布局及锁状态变化
    Java虚拟机17:互斥同步、锁优化及synchronized和volatile
    Java虚拟机16:Java内存模型
  • 原文地址:https://www.cnblogs.com/jerryho/p/4750048.html
Copyright © 2011-2022 走看看