-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
Collection -Set -HashSet
| -TreeSet
List 数据结构。
| | |
Vector ArrayList LinkedList
1,add方法的参数类型是Object。以便于接瘦任意类型对象。
2,集合中存储的都是对象的地址或者引用。
什么是迭代器?
其实就是集合的取出元素方式。
public class collectionDemo {
public static void main(String [] args)
{
method_get();
}
public static void method_get()
{
ArrayList al= new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。
while(it.hasNext())
{
sop(it.next());//去一个元素
}
}
public static void method()
{
ArrayList al1= new ArrayList();
al1.add("java1");
al1.add("java2");
al1.add("java3");
al1.add("java4");
ArrayList al2= new ArrayList();
al2.add("java1");
al2.add("java2");
al2.add("java5");
al2.add("java6");
//取交集,al1中只会保存和al2中相同部分。
al1.retainAll(al2);
//移除一部分元素。
al1.removeAll(al2);
sop(al1);
sop(al2);
}
public static void show()
{
//创建一个集合容器,使用collectiong接口的子类 ArrayList
ArrayList al= new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
//添加元素 打印原集合
sop(al);
//获取长度
sop("size:"+al.size());
//删除元素
sop(al.remove("java2"));
sop(al);
//清空
// al.clear();
sop(al);
//判断元素
sop("java3是否存在"+al.contains("java3"));
sop("集合是否为空"+al.isEmpty());
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
------------------------
collection
--List
元素是有序的,元素可以重复,因为该集合体系有索引
XX --ArrayList;底层数据结构使用的是数组结构。查询速度快。增删慢。线程不同步。
XX --LinkList;底层使用的是链表数据结构。增删速度快,查询慢。
--Vector;底层数组数据结构。线程同步
--Set
元素无序,元素不可以重复。
List
特有方法,凡是可以操作角标的方法都是该体系特有方法。
曾
add(index ,element);
addAll(index ,collection);
删
remove(index);
改
set(index , element);
查
get(index);
subList(from,to);
listIterator();
List集合特有迭代器,ListIterator是Interator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生异常。
所以,在迭代器时,只能用迭代器的方法操作元素,可以Iterator的方法时有限的。
只能对元素判断,取出,删除操作。
要进行添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
ListLink:特有方法
addFirst();倒序321.。
addLast();
getFirst()
getLast()
获取元素,不删除,集合为空,抛异常。
removeFirst();
removeLast();
获取元素,删除元素,集合为空,抛异常。
jdk1.6替代方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,不删除元素,集合为空,返回null。
pollFirst();
pollLast();
获取元素,删除元素,集合为空,返回null。
import java.util.*;
public class ListDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String [] args)
{
ArrayList al= new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop(al);
ListIterator li = al.listIterator();
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java2"))
//li.add("java008");
li.set("java000");
}
sop(al);
/*//在迭代过程中添加或删除
Iterator it = al.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(obj.equals("java2"))
//al.add("java008");加不进去,不能迭代和集合共同作用。
it.remove();//将java2引用从集合中删除
sop(obj);
}*/
}
public static void methodL()
{
}
public static void method()
{
ArrayList al= new ArrayList();
al.add("java1");
al.add("java2");
al.add("java3");
al.add("java4");
sop("原集合元素:"+al);
//在指定位置添加元素
al.add(1,"java9");
sop("现在集合元素:"+al);
//删除指定位置元素
al.remove(2);
sop("删除后"+al);
//改元素
al.set(3, "java8");
sop("修改后"+al);
//通过角标获取元素
sop("角标获取"+al.get(1));
//获取所有元素
for(int x = 0 ; x< al.size() ;x++)
{
sop(al.get(x));
}
//迭代器
Iterator it = al.iterator();
while(it.hasNext())
{
sop("迭代器"+it.next());
}
//通过index获取对象位置
sop("index"+al.indexOf("java3"));
List sub = al.subList(1, 3);
sop("sub="+sub);
}
}
----------------------
package Test1;
import java.util.*;
//去除 ArrayList集合中的重复元素。
public class ArrayDemo {
public static void sop(Object obj)
{
System.out.println(obj);
}
public static ArrayList SE(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 main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java1");//添加元素
al.add("java2");
al.add("java1");
al.add("java4");
al.add("java4");
al.add("java5");
al.add("java4");
sop(al);
al= SE(al);//调用函数去重
sop(al);
}
}
-------------------------------
import java.util.ArrayList;
import java.util.Iterator;
//将自定义对象作为元素存到ArrayList集合中,并去除重复元素
//比如存人对象,同姓名同年龄,视为同一个人。
//List集合判断元素是否相同,依据是元素的equals方法。
public class ArrayDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("lisi00",31));//al.add(Object obj)//Object obj =new Person("lisi",30)
al.add(new Person("lisi01",30));
al.add(new Person("lisi01",30));
al.add(new Person("lisi03",30));
al.add(new Person("lisi03",31));
al=SE(al);
Iterator it = al.iterator();
while(it.hasNext())
{
//Object obj =it.next();
//Person p = (Person)obj;//由下面代码代替
Person p =(Person)it.next();
sop(p.getName()+"---"+p.getAge());
}
}
public static ArrayList SE(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;
}
}
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;
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;
}
}
---------------------------------
* 重要XX
使用LinkedList 模拟一个堆栈队列数据结构。
堆栈:先进后出 如同一个杯子。
列队:先进先出 如同一个管子。
import java.util.*;
class DuiLie
{
private LinkedList link;
DuiLie()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addFirst(obj);//添加元素
}
public Object myget()
{
return link.removeLast();//取出元素
}
public boolean isNull()
{
return link.isEmpty();//判断是否为空
}
}
public class LinkDemo {
public static void main(String[] args) {
DuiLie dl = new DuiLie();
dl.myAdd("123");
dl.myAdd("456");
dl.myAdd("789");
dl.myAdd("JQK");
while(!dl.isNull())
System.out.println(dl.myget());
}
}
---------------------------------
import java.util.Iterator;
import java.util.*;
Set 集合的功能和collecttion是一致的。
Set :元素是无序(存入和取出顺序不一定一致),元素不可以重复
HashSet: 底层数据结构是哈希表。
HashSet是如何保证元素唯一性的
是通过元素的两个方法,hashcode和equals来完成
如果元素的HashSet值相同,才会判断equals是否为true
如果元素的hashcode值不同,不会调用equals
注意
对于判断元素是否存在,以及删除等操作,依赖的方法是hashcode和equals。
TreeSet:
//{
//
//}
public class HashSet
{
public static void main(String[] args)
{
// Demo d1 = new Demo();
// Demo d2 = new Demo();
// sop(d1);
// sop(d2);
//结果为Demo@1fc4bec
// Demo@dc8569
HashSet hs =new HashSet();
hs.add("java1");
hs.add("java2");
hs.add("java3");
hs.add("java4");
Iterator it = hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
-----<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------