---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
/*14-2
1.add方法的参数类型是Object,以便于接收任意类型的对象。
2.集合中存储的都是对象引用
迭代器:
就是集合取出元素的方式。
*/
import java.util.ArrayList;
import java.util.Iterator;
class Demo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
//1.增加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
ArrayList al1 = new ArrayList();
//1.增加元素
al1.add("java01");
al1.add("java02");
al1.add("java05");
al1.add("java04");
//al1.retainAll(al);//取交集,al只会保留与al1相同的元素。
al1.removeAll(al);//去交集。
sop(al1);
sop(al);
al.remove(al);
//al.clear();
sop("java03是否存在:"+al.contains(al));
sop("集合是否为空:"+al.isEmpty());
//2.获取个数,集合长度。
sop("size: " + al.size());
sop(al);
/*Iterator it = al.iterator();
while(it.hasNext()){
sop(it.next());
}*/
for (Iterator it = al.iterator(); it.hasNext();){
sop(it.next());
}
}
public static void sop (Object obj){
System.out.println(obj);
}
}
//14-3_6
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/*
collection
|--List: 元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList: 底层的数据结构使用 数组:特点在与查询速度快。但是增删较慢。线程不同步。
|--LinkedList:底层的数据结构使用的是 链表:特点:增删快,查询慢。
|--Vector:底层的数组结构是数组。线程同步。增删,查询都较慢。被ArrayList替代。
|--Set: 元素是无序的,元素不可以重复。
List:特有的方法。凡是可以操作角标的方法都是该体系特有的方法。
增:
add(index,element);
addAll(index,Collection);
删:
remove(index);
改:
set(index,element);
查:
get(index);
subList(from,to);
listIterator();
List 集合特有的迭代器:ListIterator是Iterator的子接口。
在迭代是,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以 在迭代器时,只能用迭代器的方法操作元素。可是Iterator 的方法 有限,
只能进行 判断,取出,删除的操作。
如果想要用其他的操作 如添加,修改等,就需要使用子接口。ListIterator.
该接口只能通过List集合的listIterator方法获取。
*/
class Demo{
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,"java05");
sop("原集合是:" + al);
al.remove(3);
sop("原集合是:" + al);
al.set(2, "java06");
sop("get(1)="+al.get(1));
sop(al);
for(int x=0;x<al.size();x++){
sop(al.get(x));
}
/*for(Iterator it = al.iterator(); it.hasNext(); ){
sop(it.next());
}*/
//通过indexOf获取对象的位置
sop("index="+al.indexOf("java01"));
List sub = al.subList(1, 3);
sop("sub=" + sub);
//*******************
//演示列表迭代器
sop(al);
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("java03"))
//al.add("java003");//不可以同时用迭代器和ArrayList同时对同一个对象进行操作。
it.remove();
sop("obj=" + obj);
}
sop(al);
//ListIterator*******************************
ListIterator li = al.listIterator();
while(li.hasNext()){
Object obj = li.next();
if(obj.equals("java03"))
//li.remove();
//li.add("java0");
li.set("java0");
sop("obj=" + obj);
}
sop(li.hasNext());
sop(li.hasPrevious());
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//14-7
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
/*
枚举就是Vector 特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。
因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。枚举郁郁而终了。
*/
class Demo{
public static void main(String [] args){
Vector v = new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en = v.elements();
while(en.hasMoreElements()){
sop(en.nextElement());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
/*14-8
LinkedList 特有方法
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除。
removeFirst();
removeLast();
获取并删除元素,如果集合中没有元素,会出现NoSuchElementException.
在JDK 1.6 出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
pollFirst();
pollLast();
获取并删除元素,如果集合中没有元素,返回null。
*/
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
class Demo{
public static void main(String [] args){
LinkedList ll = new LinkedList();
ll.addFirst("java01");
ll.addFirst("java02");
ll.addFirst("java03");
ll.addFirst("java04");
sop(ll);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//14-9
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;
/*
使用LinkedList模拟一个堆栈或者队列数据结构
堆栈:先进后出
队列:先进先出
*/
class Queue{
private LinkedList link;
Queue(){
link = new LinkedList();
}
public void myAdd(Object obj){
link.addFirst(obj);
}
public Object myGet(){
return link.removeLast();
}
public boolean isNull(){
return link.isEmpty();
}
}
class Demo{
public static void main(String [] args){
Queue q = new Queue();
q.myAdd("java--1");
q.myAdd("java--2");
q.myAdd("java--3");
q.myAdd("java--4");
while(!q.isNull()){
sop(q.myGet());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//14-10
import java.util.ArrayList;
import java.util.Iterator;
/*
去除ArrayList集合中重复元素。
*/
class Demo{
public static void main(String [] args){
ArrayList al = new ArrayList();
al.add("java-01");
al.add("java-01");
al.add("java-01");
al.add("java-02");
al.add("java-02");
al.add("java-03");
al = singleElement(al);
sop(al);
}
public static ArrayList singleElement(ArrayList al){
ArrayList newAl = new ArrayList();
Iterator it = al.iterator();
//it.next() 调用一次,就要用it.hasNext()判断一次。
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);
}
}
//14-11
import java.util.ArrayList;
import java.util.Iterator;
/*
将自定义的对象作为元素存到ArrayList中,并去除ArrayList集合中重复元素。
比如:人对象:同名,同年龄的 视为同一个对象,为重复元素。
List集合判断元素是否相同依据的是equals方法。
*/
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(!(obj instanceof Person))
return false;
Person p = (Person) obj;
System.out.println(this.name+"....."+p.name);
return ((this.age == (p.age)) && (this.name.equals(p.name)));
}
}
class Demo{
public static void main(String [] args){
ArrayList al = new ArrayList();
al.add(new Person("mike01",30));//al.add(Object obj);//Object obj = new Person();
al.add(new Person("mike02",31));
al.add(new Person("mike03",32));
al.add(new Person("mike03",32));
al.add(new Person("mike04",30));
al.add(new Person("mike04",30));
al.add(new Person("mike04",30));
sop("remove mike03, 30: "+al.remove(new Person("mike03",32)));
al = singleElement(al);
Iterator it = al.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
sop(p.getName()+"....."+p.getAge());
}
sop(al);
}
public static ArrayList singleElement(ArrayList al){
ArrayList newAl = new ArrayList();
Iterator it = al.iterator();
//it.next() 调用一次,就要用it.hasNext()判断一次。
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);
}
}
//14-12
import java.util.HashSet;
import java.util.Iterator;
/*
Set: 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层结构是Hash表。
|--TreeSet:
Set集合的功能和Collection是一致的。
*/
class Demo{
public static void main(String [] args){
HashSet hs = new HashSet();
sop(hs.add("java-01"));
sop(hs.add("java-01"));
sop(hs.add("java-02"));
sop(hs.add("java-03"));
sop(hs.add("java-04"));
Iterator it = hs.iterator();
while(it.hasNext()){
sop(it.next());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
//14-13
package com.eclipsedemo;
import java.util.HashSet;
import java.util.Iterator;
/*
Set: 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层结构是Hash表。
HashSet 是如何保证元素的唯一性的呢?
是通过元素的两个方法,hashCode 和 equals来完成的。
如果元素的hashcode值相同,才会判断equals是否为true;
如果元素的hashcode值不相同,不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是hashcode和equals。
|--TreeSet:
Set集合的功能和Collection是一致的。
*/
class Demo{
public static void main(String [] args){
HashSet hs = new HashSet();
hs.add(new Person("mike",20));
hs.add(new Person("mik",20));
hs.add(new Person("mke",30));
hs.add(new Person("mke",30));
hs.add(new Person("mike",20));
sop("a1: " + hs.contains(new Person("mike",20)));
sop("a2: " + hs.remove(new Person("mik",20)));
Iterator it = hs.iterator();
while(it.hasNext()){
Person p = (Person) it.next();
System.out.println(p.getName()+"....."+p.getAge());
}
}
public static void sop(Object obj){
System.out.println(obj);
}
}
class Person{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
if(!(obj instanceof Person))
return false;
Person p = (Person) obj;
System.out.println(this.name+"...equals .."+p.name);
return ((this.age == (p.age)) && (this.name.equals(p.name)));
}
@Override
public int hashCode() {
System.out.println(name + "...hashCode");
// TODO Auto-generated method stub
return name.hashCode() + age*20;
}
}
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------