黑马程序员------集合List

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




Collection 

|---List:元素是有序的,元素可以重复,因为该集合体系有索引

    |----ArrayList:底层的数据结构是用的是数组 数据结构。 线程不同步。

    |-----LinkList;底层的数据结构是用的链表结构

    |------Vector; 底层数据结构 是数组 数据结构。 线程是同步的,支持枚举

|---Set: 元素是无序的(存入和去除的循序不一定一致),元素不可以重复;

    |-----HashSet:底层数据结构是哈希表

HashSet:如何保证元素的唯一性;

如果元素的HashCode值相同,才会判断equals方法,是否为true

    |-----TreeSet; 可以对Set集合元素进行排序。

底层数据结构是二叉树。

保证元素唯一性依据:comparTo方法return 0;

TreeSet的第二种排序方式;

当元素自身不具备比较性时,或者具备的比较性不是所需要的

这时需要让容器自身具备比较性。

定义了比较器,将比较器  

注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcodeequals方法

List:

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

1.增

add(index,element);

addAll(index, Collection)

2.删

Remove(index)

3.改

Set(index, element)

4.查

get(indxx)

subList(from, to);

listIterator();

List 集合特有的迭代器,ListIteratorIterator的子接口

在迭代式,不可以通过集合对象的方法操作集合中的元素。

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


下面介绍集合框架的共性方法:以ArrayList()来举例说明


import java.util.*;

public class ArrayListDemo

{

    public static void main(String[] args)

    {

ArrayList a1 = new ArrayList();

//1 添加元素

a1.add("java01");//这里是ArrayList的添加方法因为字符串也是对象 所以可以传字符串  这里

a1.add("java02");

a1.add("java03");

sop("a1 = "+a1);

//2 获取长度

sop("长度为:" +a1.size());//获取长度

//3 移除元素

a1.remove(2);//移除第三个元素  移除时必须是在容器内 如果越界则会发生异常

sop("a1 = " +a1);

//4 判断元素

sop("容器是否为空 "+a1.isEmpty());//判断容器内元素是否为空  为空 true 不为空false

sop("java01是否存在:"+a1.contains("java01"));//判断某元素是否存在

// 求两个容器中的交集 用到 retainAll()方法 

ArrayList a2 = new ArrayList();

a2.add("java0001");

a2.add("java0002");

a2.add("java0003");

a2.add("java0004");

ArrayList a3 = new ArrayList();

a3.add("java0001");

a3.add("java0002");

a3.add("java0006");

a3.add("java0005");

//a2.retainAll(a3);//求a2 在 a3中相同的部分

//sop("a2和a3相同的部分为:"+a2);

a2.removeAll(a3);//将a3在a2中相同的部分去掉

sop("a2在a3中不同的部分并删除:"+ a2);

sop("a3为:" + a3);

    }

    

    public static void sop(String st)//这个是接收String 类型的

    {

System.out.println(st);

    }

    public static void sop(Object obj)//这个是接收Object 类型的

    {

System.out.println(obj);

    }

}





import java.util.ArrayList;
import java.util.Iterator;
//下面是遍历容器的方法
public class ArrayListDemo2
{
    public static void main(String[] args)
    {
	method_get();
	
    }
    // 5 遍历容器中的对象使用 iterator()方法 下面用个方法举例说明
    public static void method_get()
    {
	ArrayList a4 = new ArrayList();
	a4.add("java0001");
	a4.add("java0002");
	a4.add("java0003");
	a4.add("java0004");
	
	Iterator it = a4.iterator();//通过把这个容器中的
	
	//sop(it.next());//获得容器中一个对象
	sop(it.hasNext());//判断容器中是否还有元素可以迭代,如果有返回true
	
	while(it.hasNext())//获取迭代器 用于去除容器中所有元素
	{
	    sop(it.next());
	}
	
    }
    
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }
}



//这里是ArrayList中特有的方法的使用

import java.util.*;

public class ListDemo
{
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }

    public static void main(String[] args)
    {

	ArrayList b1 = new ArrayList();

	// 1, 增加元素
	b1.add("java001");
	b1.add("java002");
	b1.add("java003");
	b1.add("java004");

	sop("原集合是:" + b1);
	// 1,1 在指定位置添加元素;
	b1.add(1, "java111");
	sop("在角标为1的位置添加java111:" + b1);

	// 2,删除指定位置元素
	b1.remove(3);
	sop("删除角标为3的元素:" + b1);

	// 3,修改元素
	b1.set(3, "java333");
	sop("修改角标为3的元素" + b1);

	// 4,通过角标获取元素
	sop("获取角标1的元素:" + b1.get(1));

	// 4,1 获取所有元素 用循环就行了
	sop("获取所有元素:");
	for (int x = 0; x < b1.size(); x++)
	{

	    sop("b[" + x + "]" + b1.get(x));
	}

	// 5, 通过对象获取位置 indexOf()
	sop("java001的位置 : " + b1.indexOf("java001"));

	List sub = b1.subList(0, 2);// 注意 这里是List
	sop("角标从0到2的元素" + sub);

	// 6 列表迭代器 ListIterator()
	ListIterator li = b1.listIterator();// 这里是ListIterator 用这个可以添加和修改
					    // 用Iterator不可以

	while (li.hasNext())
	{
	    Object obj = li.next();// 因为不知道容器中是什么类型 所以接收用Object类型

	    if (obj.equals("java333"))
	    {
		li.set("java3");
	    }
	}
	sop("替换后集合是:" + b1);

    }

}



package List1;
import java.util.*;
/*
 * 需求:去除ArrayList重复元素
 **/
public class ArrayListDemo3
{
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }
    
    public static void main(String[] args)
    {
	ArrayList a1 = new ArrayList();
	a1.add("java01");
	a1.add("java02");
	a1.add("java01");
	a1.add("java02");
	a1.add("java03");
	sop(a1);
	
	a1 = bijiao(a1);//进行比较
	sop(a1);
	
    }
    
    public static ArrayList bijiao(ArrayList a1)//这里的比较是简单的比较 没有对多个属性进行比较,下个例子会有
    {
	
	//建立一个临时容器
	ArrayList new1 = new ArrayList();
	Iterator it = a1.iterator();//用于对a1进行遍历的 建立对象引用
	while(it.hasNext())
	{
	    Object obj = it.next();
	    if(!new1.contains(obj))//如果这个临时容器NEW1中不包含obj里面的元素
	    {
		new1.add(obj);//那么添加进入new1
	    }
	}
	
	return new1;
	
    }

}

import java.util.ArrayList;
/*
 *需求:将自定义对象作为元素存入ArrayList()数组中,并去除相同元素
 *建立人类 属性有姓名 年龄 同姓名同年龄 视为重复元素
 *
 *思路:1 对人描述 将数据封入对象
 * 2 定义容器 将人进行存储
 * 3 取出
 **/
import java.util.Iterator;

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))//instanceof 判断其左边对象是否为其右边类的实例
	{
	    return false;
	}
	
	Person p = (Person)obj;//强制转换
	return this.name.equals(p.name) && this.age == p.age;
    }

    public String getName()
    {
	return name;
    }

    public int getAge()
    {
	return age;
    }
}

public class ArrayList4
{
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }

    public static void main(String[] args)
    {
	ArrayList a1 = new ArrayList();
	a1.add(new Person("lisi01", 23));
	a1.add(new Person("lisi02", 23));
	a1.add(new Person("lisi03", 25));
	a1.add(new Person("lisi04", 25));
	a1.add(new Person("lisi04", 25));
	
	a1 = bijiao(a1);

	Iterator it = a1.iterator();

	while (it.hasNext())
	{
	    // Object obj = it.next();//返回一个Object类型,因为Iterator不知道容器中是什么类型
	    // Person p = (Person)obj;//向下转型 将obj转成 person类型
	    Person p = (Person) it.next();// 一般写成这个简单形式
	    sop(p.getName() + "......" + p.getAge());
	}
    }
    
    public static ArrayList bijiao(ArrayList a1)
    {
	
	//建立一个临时容器
	ArrayList new1 = new ArrayList();
	Iterator it = a1.iterator();//用于对a1进行遍历的 建立对象引用
	while(it.hasNext())
	{
	    Object obj = it.next();
	    if(!new1.contains(obj))//如果这个临时容器NEW1中不包含obj里面的元素
	    {
		new1.add(obj);//那么添加进入new1
	    }
	}
	
	return new1;
	
    }

}

*********************************************************************************************************************************************************


下面的是LinkList 的方法  链表

import java.util.*;
/*
 * LinkedLink:特有方法
 * addFirst();
 * addLast();
 * 
 * getFirst();
 * getLast();
 * 获取元素,但不删除元素,如果集合中没有元素将异常
 * 
 * removeFirst();
 * removeLast();
 * 获取元素,并将元素删除,如果集合中没有元素将抛出异常
 * 
 * 
 * jdk1.6后出现替代方法
 * 
 * offerFirst();
 * offerLast();
 * 
 * peekFirst();
 * peekLast();
 * 
 * poliFirst();
 * poliLast()
 * 
 * 
 */
public class LinkListDemo
{
    public static void sop(Object obj)
    {
	System.out.println(obj);
    }
    
    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.addFirst("java04");
*/
	sop("链表::"+link);
	
	//获取元素
	sop("第一个元素:"+link.getFirst());//获取第一个元素
	sop("最后一个元素:"+link.getLast());//获取最后一个元素
	
	//获取元素并删除
	sop(link.removeFirst());
	sop(link);
	sop(link.removeLast());
	sop(link);
	sop("剩余的元素个数" +link.size());
	
	//遍历
	while(!link.isEmpty())//元素不为空
	{
	    sop("边遍历边删除:"+link.removeFirst());
	    
	}
	
	

	
	
    }

}






你可能感兴趣的:(黑马程序员------集合List)