黑马程序员-----Java基础-----Collection-list


-----<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:


//class Demo
//{
//
//}
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>、期待与您交流! -------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值