zoukankan      html  css  js  c++  java
  • 黑马程序员——JAVA基础之List集合

    ------- android培训java培训、期待与您交流 ----------

    Collection :


        |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
            |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
            |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
            |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
        |--Set:元素是无序,元素不可以重复。


    List:
        特有方法。凡是可以操作角标的方法都是该体系特有的方法。
     

        add(index,element); 在列表的指定位置插入指定元素

        addAll(index,Collection); 将指定 collection 中的所有元素都插入到列表中的指定位置

    import java.util.ArrayList;
    
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("03");
    		System.out.println(al);
    		
    		al.add(1,"04");
    		System.out.println(al);
    		
    		ArrayList al1 = new ArrayList();
    		
    		al1.add("05");
    		al1.add("06");
    		System.out.println(al1);
    		
    		al.addAll(1,al1);
    		System.out.println(al);
    	}
    }
    


    删 

        remove(index); 移除列表中指定位置的元素

    import java.util.ArrayList;
    
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("03");
    		System.out.println(al);
    
    		al.remove(1);
    		System.out.println(al);
    		
    	}
    }
    



     

         set(index,element); 用指定元素替换列表中指定位置的元素

    import java.util.ArrayList;
    
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("03");
    		System.out.println(al);
    
    		al.set(1,"04");
    		System.out.println(al);
    		
    	}
    }
    



        get(index): 返回列表中指定位置的元素。

        subList(from,to); 返回列表中指定的之间的部分,包含头不包含尾

        listIterator(); 返回此列表元素的列表迭代器(按适当顺序)。

        int indexOf(obj):获取指定元素的位置。

        listIterator(int index); 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    /**
     * 
     * 获取集合中元素的方法演示
     *
     */
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("03");
    		System.out.println(al);
    		
    		List sub = al.subList(0,2);
    		System.out.println(sub);
    		
    		System.out.println("01 对应的角标是:"+al.indexOf("01"));
    
    		for (int i=0;i<al.size();i++)//方法一
    		{
    			System.out.println(al.get(i));
    		}
    		
    		for (Iterator it = al.iterator();it.hasNext(); )//方法2
    		{
    			System.out.println(it.next());
    		}
    		
    	}
    }
    


    List集合特有的迭代器。ListIterator是Iterator的子接口。
     
            在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作元素,可是 Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。

    import java.util.ArrayList;
    import java.util.ListIterator;
    
    
    /**
     * 
     * ListIterator演示
     *
     */
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("03");
    		System.out.println(al);
    		
    		ListIterator li = al.listIterator();
    		System.out.println(li.hasNext());//判断后面有没有元素
    		System.out.println(li.hasPrevious());//判断前面有没有元素
    
    		//把集合里面的元素替换成另一种元素
    		while (li.hasNext())
    		{
    			Object obj = li.next();
    			
    			if (obj.equals("02"))
    				li.set("04");			
    		}
    		
    		System.out.println(li.hasNext());//判断后面有没有元素
    		System.out.println(li.hasPrevious());//判断前面有没有元素
    		System.out.println(al);
    	}
    }
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     * 去除ArrayList中的重复元素
     * 	定义一个临时容器储存
     * 	如果不相同存入,相同就不存
     * 	便利完成之后返回
     */
    public class ArrayListTest
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add("01");
    		al.add("02");
    		al.add("01");
    		al.add("04");
    		al.add("02");
    		System.out.println(al+"------"+al.size());
    		
    		System.out.println(SingleElement(al));		
    	}
    	
    	//定义一个函数,返回一个ArrayList集合,参数ArrayList。功能是去除ArrayList中的重复元素.
    	public static ArrayList SingleElement(ArrayList al)
    	{
    		ArrayList arrayBuffer = new ArrayList();
    		
    		for (Iterator it = al.iterator();it.hasNext(); )
    		{
    			Object obj = it.next();
    			
    			if (!arrayBuffer.contains(obj))
    			{
    				arrayBuffer.add(obj);
    			}
    		}
    		return arrayBuffer;
    		
    	}
    
    }
    


     

    <span style="font-size:14px;"><strong></strong></span><pre class="java" name="code">import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     * 将自定义元素存到ArrayList结构中去,并去掉重复元素
     * 	比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
     * 
     * 思路: 
     *		对人描述,将数据封装进人对象。 
     *		定义容器,将人存入。 
     *		取出。 
     *   List集合判断元素是否相同,依据是元素的equals方法。 	
     */
    public class ArrayListTest
    {
    	public static void main(String[] args)
    	{
    		ArrayList al = new ArrayList();
    		
    		al.add(new Person("zhangsan",13));
    		al.add(new Person("lisi",13));
    		al.add(new Person("zhangsan",13));
    		al.add(new Person("zhangsan",15));
    		al.add(new Person("lisi",13));
    		al.add(new Person("lisi",12));
    		
    		al = singleElement(al);
    		
    		for (Iterator it = al.iterator();it.hasNext(); )
    		{
    			Person p = (Person)it.next();
    			System.out.println(p.getName()+"------"+p.getAge());
    		}
    	}
    	
    	//定义一个函数,返回ArrayList,参数ArrayList。函数功能去除ArrayList集合中的重复元素
    	public static ArrayList singleElement(ArrayList al)
    	{
    		ArrayList arrayBuffer = new ArrayList();
    		
    		for (Iterator it = al.iterator();it.hasNext(); )
    		{
    			if (!arrayBuffer.contains(it.next()))
    			{
    				arrayBuffer.add(it.next());
    			}
    		}
    		return arrayBuffer;
    	}
    }
    
    //声明一个Person对象,具有年龄和名字的属性
    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;  
    	        return this.name.equals(p.name) && this.age == p.age;  
    	    }     
    	
    	public String getName() 
    	{
    		return name;
    	}
    
    	public void setName(String name) 
    	{
    		this.name = name;
    	}
    
    	public int getAge() 
    	{
    		return age;
    	}
    
    	public void setAge(int age) 
    	{
    		this.age = age;
    	}
    }
    

    
    
    

     

    LinkedList:特有方法:

    addFirst(); 将指定元素插入此列表的开头。

    addLast();  将指定元素添加到此列表的结尾。

     

    getFirst(); 返回此列表的第一个元素。

    getLast(); 返回此列表的最后一个元素。
     

     

    get方法获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
     
    removeFirst();  移除并返回此列表的第一个元素。

    removeLast(); 移除并返回此列表的最后一个元素。

    remove方法获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException

    import java.util.LinkedList;
    
    /**
     * 
     * LinkedList演示
     *
     */
    
    public class ListDemo 
    {
    	public static void main(String[] args)
    	{
    		LinkedList ll = new LinkedList();
    		
    		ll.add("02");
    		ll.addFirst("01");
    		ll.addLast("03");
    		System.out.println(ll);
    		
    		System.out.println(ll.getFirst());
    		System.out.println(ll.getLast());
    		System.out.println(ll);
    		
    		System.out.println(ll.removeFirst());
    		System.out.println(ll.removeLast());
    		System.out.println(ll);
    		
    		//打印移出方式
    		while (!ll.isEmpty())
    		{
    			System.out.println(ll.removeLast());
    		}
    	}
    }
    


     在JDK1.6出现了替代方法: 
     
    offerFirst(); 在此列表的开头插入指定的元素。
    offerLast(); 在此列表末尾插入指定的元素。
     
    peekFirst();  获取但不移除此列表的第一个元素;如果此列表为空,则返回 null
    peekLast(); 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null
    获取元素,但不删除元素。如果集合中没有元素,会返回null。
     
    pollFirst(); 获取并移除此列表的第一个元素;如果此列表为空,则返回 null
    pollLast(); 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null
    获取元素,但是元素被删除。如果集合中没有元素,会返回null。

    堆栈和队列: 


    堆栈:先进后出  如同一个杯子。

    队列:先进先出 First in First out  FIFO 如同一个水管。

    import java.util.LinkedList;
    
    /**
     * 
     * 用LinkedList模拟一个堆栈结构的
     *
     */
    
    public class DuiZhanDemo 
    {
    	public static void main(String[] args)
    	{
    		DuiZhan dz = new DuiZhan();
    		
    		dz.myAdd("01");
    		dz.myAdd("02"); 
    		dz.myAdd("03");
    		
    		while (!dz.isNull())
    		{
    			System.out.println(dz.myGet());
    		}
    	}
    }
    
    //堆栈结构:先进后出
    class DuiZhan
    {
    	private LinkedList link;
    	
    	DuiZhan()
    	{
    		link = new LinkedList();
    	}
    	
    	public void myAdd(Object obj)
    	{
    		link.addFirst(obj);
    	}
    	
    	public Object myGet()
    	{
    		return link.removeFirst();		
    	}
    	
    	public boolean isNull()
    	{
    		return link.isEmpty();
    	}
    }
    


     

    ------- android培训java培训、期待与您交流 ----------

  • 相关阅读:
    【poj1195】Mobile phones(二维树状数组)
    【2018年全国多校算法寒假训练营练习比赛(第五场)-E】情人节的电灯泡(二维树状数组单点更新+区间查询)
    【2018年全国多校算法寒假训练营练习比赛(第五场)-G】 送分啦-QAQ(斐波那契博弈)
    【Wannafly挑战赛10
    【2018年全国多校算法寒假训练营练习比赛(第四场)- E】通知小弟(强连通缩点)
    JS中的forEach、$.each、map方法推荐
    关于echarts3地图下钻省市
    Vue2.0总结———vue使用过程常见的一些问题
    我理解的关于Vue.nextTick()的正确使用
    一个用 vue 写的树层级组件 vue-ztree
  • 原文地址:https://www.cnblogs.com/runwind/p/4212190.html
Copyright © 2011-2022 走看看