黑马程序员——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培训、期待与您交流 ----------

原文地址:https://www.cnblogs.com/runwind/p/4212190.html