数据类型札记一

数据类型笔记一
connection
|
|
     ---------------------------
list         set
|   |
|   |
--------------------             ------------------
| | |   |                |
| | |   |       |
ArrayList  LinkedList Vector HashSet          TreeSet

为什么会出现这么多的容器?
因为每个容器对数据的存储方式不同
这个存储方式称之为:数据结构

==========================================================================================================================
集合框架共性的操作
package CollectionDemo;

import java.util.*;
/**
 * add方法的参数类型是Object 方便接收各种任意类型的对象
 * 集合中存储的都是对象的引用或者是地址
 * @author bing
 *
 */
public class CollectionDemo {
	public static void main(String[] args) {
		base_Method2();
	}
	
	public static void base_Method2()
	{
		ArrayList al1 = new ArrayList();
		ArrayList al2 = new ArrayList();
		al1.add(new Person("Kobe","男",34));
		al1.add(new Person("Lebron","男",27));
		al1.add(new Person("姚明","男",34));
		al2.add(new Person("Kobe","男",34));
		al2.add(new Person("Bosh","男",27));
		al2.add(new Person("姚明","男",34));
		al1.add("A");
		al2.add("A");
		al1.retainAll(al2);//取交集,al1中只会保留和al2相同的元素
		sop(al1);//这里只会输出A 只有A为交集中的元素
		sop(al2);
	}
	
	public static void base_Method()
	{
		ArrayList a1 = new ArrayList();
		// 1 ,添加元素
		Person p1 = new Person("林书豪","男",21);
		a1.add(p1);
		a1.add(new Person("Kobe","男",34));
		a1.add(new Person("Lebron","男",27));
		a1.add(new Person("姚明","男",34));
		a1.add("asdfghj");
		// 2, 获取元素
		sop("size"+a1.size());
		
		sop(a1);//打印集合删除前的集合
		//3,  删除元素
		a1.remove(p1);
		//a1.remove("asdfghj");
		sop(a1);//打印删除后的集合
		//4 , 判断元素
		sop("asdfghj是否存在"+ a1.contains("asdfghj"));
		sop("集合是否为空"+a1.isEmpty());
		a1.clear();//清空集合
		
		sop(a1);//打印清空后的集合
		sop("集合是否为空"+a1.isEmpty());
	} 
	
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}




==========================================================================================================================
迭代器
public static void method_get()
	{/**
	*迭代器是用来取出集合中元素的方法
	*取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素,
	*那么取出方式就被定义成了内部类。
	*而每一个容器的数据结构是不同的,所以取出动作的动作细节也不相同。但是有共性
	*内容判断和取出,那么可以将其共性抽取。这些内部类都符合一个规则。该规则就是
	*Iterator接口。那么如何获取集合的取出对象呢?通过对外提供一个方法
	*这个方法就是iterator();
	*/
		ArrayList al1 = new ArrayList();
		al1.add("java01");al1.add("java02");al1.add("java03");
		//获取迭代器,用于输出集合中的元素
		Iterator it = al1.iterator();//al1.iterator()返回的是一个Iterator的子类对象
		//Iterator 是个接口 无法自行生产对象 但是可以由al中的方法生产对象并返回
		sop(it.next());sop(it.next());
		//可以通过循环输出所有的集合中的元素
		/*while(it.hasNext())//hasNext()如果集合中还有元素 则返回true
		{
			sop("while中的");
			sop(it.next());
		}*/
		for(Iterator it1 = al1.iterator();it1.hasNext();)
		{
			sop(it1.next());
		}
	
	}


==========================================================================================================================
List的共性方法以及操作

package ListDemo;
import java.util.*;
/**
 * collection
 * 	|--List:元素是有序的,元素可以重复,因为该集合体系有索引
 * 	|--set:元素是无序的,元素不可以重复 ,该集合体系无索引
 * 
 * List:
 * 		特有方法,凡是可以操作角标的方法都是该体系的特有方法
 * 	增
 * 		add(index),element);
 * 		addAll(index,Collection)//添加一堆元素
 * 	删
 * 		remove(index)
 *  改
 *  	set(index,element)
 *  查
 *  	get(index)
 *      subList(from,to)
 *      listIterator()//list特有的迭代器
 * @author bing
 *
 */
public class ListDemo {
	public static void main(String[] args) {
		ArrayList al = new ArrayList();
		
		al.add("java01");
		al.add("java02");
		al.add("java03");
		al.add("java04");
		//在指定位置添加元素
		sop("原集合是"+al);
		al.add(1, "java");
		sop("在角标为1位置添加元素后的集合是"+al);
		//删除指定位置的元素
		al.remove(4);
		sop("在角标为4位置删除元素后的集合是"+al);
		//修改元素 修改角标为4的元素  
		al.set(3, "javahello");
		sop(al);
		//通过角标获取 元素
		sop("al.get(3)"+al.get(3));
		//获取所有所有元素
		for(int i = 0;i<al.size();i++)//注意这里是al.size()
		{
			System.out.println("al("+i+")"+al.get(i));
		}
		Iterator it = al.iterator();
		Iterator ti = al.listIterator();
		while(it.hasNext())
		{
			sop("next"+it.next());
		}
	}
	public static void sop(Object obj)
	{
		System.out.println(obj);
	}
}



==========================================================
迭代器
/**在迭代过程中,删除元素 这里需要注意的是 在迭代的过程中可能会发生并发访问异常
		 * 注意:访问List的方法有两类一种是集合的方式比如al.add()这是属于集合的访问 方式 另一种是迭代器的方式 不能再迭代的同时再用集合的
		 * 方法访问List 因为---迭代器在建立的时候是根据原来的List建立的 如果在迭代的过程,对List进行集合操作,会造成迭代器无法确认List
		 * 是原List还是操作后的List 造成并发访问异常。如果要在迭代的过程中对List进行操作,那么参阅Iterator类中的方法。其实Iterator类
		 * 中就三个方法hasNext(),next(),remove(),所以可以在迭代的过程中根据条件删除元素
		 * 从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的
		 * 其他方式修改了该迭代器所指向的集合,则迭代器的行为是不明确的。
		 * 但是ListIterator功能很多 这是List集合特有的迭代器 
		 * 可以向前遍历 可以向后遍历 可以删除添加 很好很强大
		 */
		sop(arrl);
		while(ite.hasNext())
		{
			Object obj = ite.next();//取出List中的对象
			if(obj.equals("java1"))//与给定条件判断
			{
				ite.remove();//删除元素
			}
		}
		sop(arrl);