容器类可以放入任何对象,但是在读取的时候进行类型转换时,如果放入的对象不一致就会出问题.
class Cat{
private int i;
public Cat(int i){
this.i=i;
}
public void id(){
System.out.println("cat"+i);
}
}
class Dog{
private int i;
public Dog(int i){
this.i=i;
}
public void id(){
System.out.println("Dog"+i);
}
}
public class CatasDog {
public static void main(String[] args){
List cat=new ArrayList();
for(int i=0;i<10;i++)
cat.add(new Cat(i));
//Dog dog=new Dog(10);
//cat.add(dog);
for(int i=0;i<cat.size();i++)
((Cat)cat.get(i)).id();
}
}
可以创建一个只能接受一种类型的ArrayList:
import java.util.*;
class Mouse {
}
public class MouseList {
private List list = new ArrayList();
public void add(Mouse m) {
list.add(m);
}
public Mouse get(int index) {
return (Mouse) list.get(index);
}
public int size() {
return list.size();
}
}
注意:这是一种设计模式,
关于迭代器:
package com.whl.bcsx;
import java.util.*;
public class IteratorTest {
public static void printAll(Iterator e){
while(e.hasNext()){
System.out.println(e.next());
}
}
public static void main(String[] args) {
List list=new ArrayList();
list.add("whl");
list.add("nj");
list.add("java");
Set set=new HashSet();
set.add("jsp");
set.add("struts");
set.add("XML");
printAll(list.iterator());
printAll(set.iterator());
}
}
迭代器的最在用处就是不用知道容器的实际类型.
无意识造成的递归:
public class Dig {
public String toString(){
return "address:"+this;
}
public static void main(String[] args) {
List list=new ArrayList();
for(int i=0;i<10;i++){
list.add(new Dig());
}
System.out.println(list);
}
}
上面代码会出现一个不断的异常,这是因为 "address:"+this会把this当作是一个字符串来处理,但它实际上不是字符串,所以就会调用这个对象的toString方法,这样就成了无限递归了.要避免这种情况就应该使用super.toString();
一些容器方法的运用:
import java.util.*;
public class IteratorTest {
public static void printAll(Iterator e){
while(e.hasNext()){
System.out.println(e.next());
}
}
public static void main(String[] args) {
List list=new ArrayList();
list.add("whl");
list.add("nj");
list.add("java");
Set set=new HashSet();
set.add("jsp");
set.add("struts");
set.add("XML");
List list1=new ArrayList();
list1.add("c++");
list1.add("vb");
list1.add("diph");
printAll(list.iterator());
printAll(set.iterator());
list.addAll(list1);
System.out.println("----------");
printAll(list.iterator());
boolean bool=list.contains("jsp");
boolean bool2=list.containsAll(list1);
System.out.println(bool);
System.out.println(bool2);
System.out.println("-----------");
list.remove("c++");
printAll(list.iterator());
System.out.println("-----------");
String[] str= (String[]) list.toArray(new String[1]);
System.out.println(str);
}
}
注意下面的代码中,用了正则表达式的一些东西:
import java.util.*;
public class SortedSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
SortedSet sort = new TreeSet(Arrays
.asList("one,two,three,four,five,six,seven,eight,nine,ten"
.split(",")));
System.out.println(sort);
String low = (String) sort.first();
String high = (String) sort.last();
System.out.println(low);
System.out.println(high);
Iterator it = sort.iterator();
for (int i = 0; i <= 6; i++) {
if (i == 3)
low = (String) it.next();
if (i == 6) {
high = (String) it.next();
System.out.println(high);
} else
it.next();
}
System.out.println(low);
System.out.println(high);
}
}
关于Map的一种用法:
package com.whl.bcsx;
import java.util.*;
class Counter{
int i=1;
public String toString(){
return Integer.toString(i);
}
}
public class Statistics {
static Random rand=new Random();
public static void main(String[] args){
Map hm=new HashMap();
for(int i=0;i<10000;i++){
Integer r=new Integer(rand.nextInt(20));
if(hm.containsKey(r))
((Counter)hm.get(r)).i++;
else
hm.put(r, new Counter());
}
System.out.println(hm);
}
}
注意在上面的代码中不能直接使用Integer这个包装器类,因为java的包装器类只能将其初始化为一个值,而且一但指定了这个值就不能改变他了,所以在此处使用Integer是不行的.
class Cat{
private int i;
public Cat(int i){
this.i=i;
}
public void id(){
System.out.println("cat"+i);
}
}
class Dog{
private int i;
public Dog(int i){
this.i=i;
}
public void id(){
System.out.println("Dog"+i);
}
}
public class CatasDog {
public static void main(String[] args){
List cat=new ArrayList();
for(int i=0;i<10;i++)
cat.add(new Cat(i));
//Dog dog=new Dog(10);
//cat.add(dog);
for(int i=0;i<cat.size();i++)
((Cat)cat.get(i)).id();
}
}
可以创建一个只能接受一种类型的ArrayList:
import java.util.*;
class Mouse {
}
public class MouseList {
private List list = new ArrayList();
public void add(Mouse m) {
list.add(m);
}
public Mouse get(int index) {
return (Mouse) list.get(index);
}
public int size() {
return list.size();
}
}
注意:这是一种设计模式,
关于迭代器:
package com.whl.bcsx;
import java.util.*;
public class IteratorTest {
public static void printAll(Iterator e){
while(e.hasNext()){
System.out.println(e.next());
}
}
public static void main(String[] args) {
List list=new ArrayList();
list.add("whl");
list.add("nj");
list.add("java");
Set set=new HashSet();
set.add("jsp");
set.add("struts");
set.add("XML");
printAll(list.iterator());
printAll(set.iterator());
}
}
迭代器的最在用处就是不用知道容器的实际类型.
无意识造成的递归:
public class Dig {
public String toString(){
return "address:"+this;
}
public static void main(String[] args) {
List list=new ArrayList();
for(int i=0;i<10;i++){
list.add(new Dig());
}
System.out.println(list);
}
}
上面代码会出现一个不断的异常,这是因为 "address:"+this会把this当作是一个字符串来处理,但它实际上不是字符串,所以就会调用这个对象的toString方法,这样就成了无限递归了.要避免这种情况就应该使用super.toString();
一些容器方法的运用:
import java.util.*;
public class IteratorTest {
public static void printAll(Iterator e){
while(e.hasNext()){
System.out.println(e.next());
}
}
public static void main(String[] args) {
List list=new ArrayList();
list.add("whl");
list.add("nj");
list.add("java");
Set set=new HashSet();
set.add("jsp");
set.add("struts");
set.add("XML");
List list1=new ArrayList();
list1.add("c++");
list1.add("vb");
list1.add("diph");
printAll(list.iterator());
printAll(set.iterator());
list.addAll(list1);
System.out.println("----------");
printAll(list.iterator());
boolean bool=list.contains("jsp");
boolean bool2=list.containsAll(list1);
System.out.println(bool);
System.out.println(bool2);
System.out.println("-----------");
list.remove("c++");
printAll(list.iterator());
System.out.println("-----------");
String[] str= (String[]) list.toArray(new String[1]);
System.out.println(str);
}
}
注意下面的代码中,用了正则表达式的一些东西:
import java.util.*;
public class SortedSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
SortedSet sort = new TreeSet(Arrays
.asList("one,two,three,four,five,six,seven,eight,nine,ten"
.split(",")));
System.out.println(sort);
String low = (String) sort.first();
String high = (String) sort.last();
System.out.println(low);
System.out.println(high);
Iterator it = sort.iterator();
for (int i = 0; i <= 6; i++) {
if (i == 3)
low = (String) it.next();
if (i == 6) {
high = (String) it.next();
System.out.println(high);
} else
it.next();
}
System.out.println(low);
System.out.println(high);
}
}
关于Map的一种用法:
package com.whl.bcsx;
import java.util.*;
class Counter{
int i=1;
public String toString(){
return Integer.toString(i);
}
}
public class Statistics {
static Random rand=new Random();
public static void main(String[] args){
Map hm=new HashMap();
for(int i=0;i<10000;i++){
Integer r=new Integer(rand.nextInt(20));
if(hm.containsKey(r))
((Counter)hm.get(r)).i++;
else
hm.put(r, new Counter());
}
System.out.println(hm);
}
}
注意在上面的代码中不能直接使用Integer这个包装器类,因为java的包装器类只能将其初始化为一个值,而且一但指定了这个值就不能改变他了,所以在此处使用Integer是不行的.