-------
android培训、
java培训、期待与您交流! ----------
元素的取出:Iterator 迭代器
练习:往HashSet中存入自定义对象,姓名和年龄相同为同一个人
集合框架:collection
--List:元素是有序的,元素可以重复,因为该集合体系有索引
--ArrayList:底层使用数组结构;查询速度很快,增删较慢,线程不同步
--LinkList:底层使用链表结构;增删速度快,查询速度慢
--Vector:底层是数组数据结构,线程同步
--Set:元素无序,不可以重复
--HashSet:底层数据结构是哈希表
--TreeSet
这些容器对数据的存储方式都有所不同,所以将这些存储方式称之为数据结构
1.collection集合中的增删改查
import java.util.*;
class CollectionDemo
{
public static void main(String[] args)
{
ArrayList al=new ArrayList(); //创建一个集合容器
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
//获取个数,集合长度。
sop("size:"+al.size());
//打印集合
sop(al);
//删除元素
al.remove("java02");
//打印集合
sop(al);
//判断元素
sop(al.contains("java03"));
sop(al.isEmpty());
}
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.removeAll(al2); //将al1中与al2相同的元素去掉
sop("al1:"+al1);
sop("al2:"+al2);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
元素的取出:Iterator 迭代器
import java.util.*;
class CollectionDemo2
{
public static void main(String[] args)
{
getMethod();
}
public static void getMethod()
{
ArrayList al=new ArrayList(); //创建一个集合容器
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it=al.iterator(); //获取迭代器,用于取出集合中的元素
while(it.hasNext()) //判断是否有元素
{
sop(it.next()); //打印出元素
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
迭代器的for循环写法:
for(Iterator it=al.iterator;it.hasNext(); )
{
<span style="white-space:pre"> </span>sop(it.next());
}
2.List集合:特有方法,可以操作角标的方法都是该体系特有的方法
import java.util.*;
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);
ListIterator li=al.listIterator(); //Iterator 只能其自身方法操作元素,比如取出删除,但要想用到添加和修改,就需要子接口ListIterator
while(li.hasNext())
{
Object obj= li.next(); //接收遍历出来的元素
if(obj.equals("java02"))
li.set("java006"); //替换元素
}
sop(al);
/*
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(obj.equals("java02"))
{
it.remove();
sop(obj);
}
}
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void method_1()
{
ArrayList al= new ArrayList();
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
sop("原集合是:"+al);
//在指定位置添加元素
al.add(1,"java09");
sop("现在的集合是:"+al);
//删除指定位置的元素
al.remove(2);
sop(al);
//修改元素
al.set(1,"java009");
sop(al);
//通过角标获取元素
sop(al.get(1));
//获取所有元素
for(int x=0;x<al.size();x++) //for循环遍历元素
{ sop(al.get(x));}
Iterator it= al.iterator(); //迭代器遍历元素
while(it.hasNext())
{
sop(it.next());
}
sop(al.indexOf("java02")); //获取元素角标
List sub=al.subList(1,3); //获取指定位置的元素集合,包含1不包含3
sop(sub);
}
}
Vector的枚举方法
import java.util.*;
class VictorDemo
{
public static void main(String[] args)
{
Vector va=new Vector();
va.add("java01");
va.add("java02");
va.add("java03");
va.add("java04");
Enumeration en=va.elements(); //枚举获取元素
while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}
}
LinkedList :特有方法:addFirst,addLast;getFirst,getLast,获取元素,但不删除元素;removeFirst,removeLast获取元素,元素被删除
但当集合为空的时候,remove 和get都会产生异常,所以在JDK1.6有了替代办法,用offer替代add,用peek替代get,用poll替代remove,此时集合如果为空,返回nullimport java.util.*;
class LinkListDemo
{
public static void main(String[] args)
{
LinkedList li=new LinkedList(); //新建一个LinkedList对象
li.addFirst("java01"); //将元素添加到第一个位置
li.addFirst("java02");
li.addFirst("java03"); //将元素添加到第一个位置
li.addFirst("java04");
sop(li.removeFirst());
/*
while(!li.isEmpty())
{
sop(li.removeFirst());
}
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
模拟一个队列的数据结构
//使用LinkedList模拟一个堆栈或者队列的数据结构
import java.util.*;
class LinkedListTest
{
public static void main(String[] args)
{
Duilie dl=new Duilie(); //新建一个队列对象
dl.Myadd("java01"); //运用自定义的添加方法添加元素
dl.Myadd("java02");
dl.Myadd("java03");
dl.Myadd("java04");
while(!dl.isNull())
{
sop(dl.Myget()); //运用自定义的get方法,获取元素
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Duilie //自定义一个队列类
{
private LinkedList link; //声明一个LinkedList链表变量
Duilie() //构造函数
{
link=new LinkedList(); //初始化link
}
public void Myadd(Object obj) //自定义一个增加元素的方法
{
link.addFirst(obj);
}
public Object Myget() //自定义一个获取元素的方法
{
return link.removeLast();
}
public boolean isNull() //判断是否为空
{
return link.isEmpty();
}
}
练习:ArrayList练习:去除集合中的重复元素
import java.util.*;
class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java02");
al.add("java05");
sop(al);
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);
}
}
AaaryList练习2:将自定义对象作为元素存入ArrayList集合中,去除相同元素。存人对象,名称相同视为同一个人
注:contains ,remove底层都是用的equals方法,只比较地址值import java.util.*;
class Person //定义一个Person类
{
//声明name,age变量
private String name;
private int age;
Person(String name,int age) //构造函数
{
//将name,age作用于整个类中
this.name =name;
this.age=age;
}
public boolean equals(Object obj) //构造属于Person的比较方法
{
//如果obj不属于person类型,就返回假
if(!(obj instanceof Person))
return false;
//属于peron类型,则说明两个对象相等
Person p=(Person)obj;
return this.name.equals(p.name) && this.age==p.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("lise1",31));
al.add(new Person("lise2",32));
al.add(new Person("lise1",31));
al.add(new Person("lise2",32));
al=singleElement(al);
Iterator it=al.iterator(); //创建迭代器
while(it.hasNext()) //迭代集合中内容
{
Person p=(Person)it.next();
System.out.println(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; //将新集合返回
}
}
3.set集合
HashSet集合的应用:无序性,取进和取出的顺序不一样。其取出元素只有迭代器一种方法import java.util.*;
class HashSetDemo
{
public static void main(String[] args)
{
HashSet hs=new HashSet(); //新建一个hashSet集合
hs.add("java01");
hs.add("java02");
hs.add("java02");
hs.add("java01");
Iterator it=hs.iterator(); //获取迭代器,注意,hashSet取出元素只有迭代器一种方法
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
练习:往HashSet中存入自定义对象,姓名和年龄相同为同一个人
import java.util.*;
class HashSetTest
{
public static void main(String[] args)
{
HashSet hs=new HashSet(); //新建一个hashSet集合
hs.add(new Person("lise1",31));
hs.add(new Person("lise2",32));
hs.add(new Person("lise1",31));
hs.add(new Person("lise2",32));
Iterator it=hs.iterator(); //获取迭代器,注意,hashSet取出元素只有迭代器一种方法
while(it.hasNext())
{
Person p=(Person)it.next();
System.out.println(p.getName()+"::"+p.getAge());
}
}
}
class Person //定义一个Person类
{
//声明name,age变量
private String name;
private int age;
Person(String name,int age) //构造函数
{
//将name,age作用于整个类中
this.name =name;
this.age=age;
}
public int hashCode() //重写hashCode方法,集合就会根据哈希值不同保证元素唯一性
{
return name.hashCode()+age;
}
public boolean equals(Object obj) //构造属于Person的比较方法
{
//如果obj不属于person类型,就返回假
if(!(obj instanceof Person))
return false;
//属于peron类型,则说明两个对象相等
Person p=(Person)obj;
System.out.println(this.name+"--"+p.name);
return this.name.equals(p.name) && this.age==p.age;
}
public String getName() //获取名字的方法
{
return name;
}
public int getAge() //获取年龄的方法
{
return age;
}
}
hashSet保持元素唯一性的原理:通过hashCode和equals方法来完成,如果元素hashCode相同,则调用equals方法,因为调用equals方法会比较慢,所以最好保持hashCode的唯一性
因此,其判断元素是否存在以及删除元素的判断依据都是hashCode值和equals方法