首页 > 代码库 > 黑马程序员——Java集合基础知识之Collection
黑马程序员——Java集合基础知识之Collection
集合基础知识——Collection
Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成。
List接口的功能方法
List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素。List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低。常用实现类有ArrayList,LinkedList。
List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素。List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低。常用实现类有ArrayList,LinkedList。
List list =new ArrayList();
//添加元素
list.add ("李白");
list.add ("李白");
list.add ("苏轼");
list.add ("李清照");
System.out .println (list.size()) ;//查询元素个数。4个
System.out .println (list.contains( "白居易"));//查询是否含有元素“白居易”,返回false
list.remove (0) ;//删除0号元素
list.indexOf ("陆游") ;//查询元素的位置,若找不到返回-1;
for(int i= 0; i< list. size();i++){
String str=(String )list.get( i);//必须强制类型转换
System .out.println( list. get(i ));
}
//用迭代去取元素
Iterator it =list .iterator ();
while(it .hasNext ()){
String name =( String)it .next (); //必须强制类型转换
System .out.println( "诗人"+name );
}
list.clear (); //清空集合
System.out .println (list.size()) ;
Set和存储顺序
存入Set的元素必须是唯一的,Set并不会保证元素不会重复,Set必须改写equals方法以确保元素的唯一性。Set需要一种方式来维护顺序,不同的Set类型会有不同的实现。
HashSet是为了快速查找而设计的Set,存入HashSet的元素必须实现hashCode。如果我们没有实现hashCode也能通过,并且没有运行错误,但是那样的话会违背Set的原则,因为它会使用默认的hashCode方法,这是合法的,尽管他是不正确的。
TreeSet可以实现元素的自然排序,但是前提是你会正确地实现Comparator或者对象本身具有你想要的比较方式。
@Override
public int hashCode () {
final int prime = 31;
int result = 1;
result = prime * result + Score;
result = prime * result + (( name == null ) ? 0 : name. hashCode ());
return result;
}
@Override
public boolean equals (Object obj ) {
if ( this == obj)
return true ;
if ( obj == null)
return false ;
if ( getClass () != obj .getClass ())
return false ;
Poet other = ( Poet) obj;
if ( Score != other. Score)
return false ;
if ( name == null ) {
if ( other. name != null )
return false ;
} else if (! name. equals (other .name ))
return false ;
return true ;
}
String name;
int Score ;
public int compareTo (Object o ) {
// TODO Auto-generated method stub
if (! (o instanceof Poet)) System. out. println ("不合法输入" );
Poet po =( Poet )o ;
return this .Score > po. Score? 1:
( this. Score== po. Score? this. name. compareTo( po. name ):- 1) ;
}
}
//往HashSet和TreeSet中添加已经实现了hashCode,equals和comparaTo的对象。
//添加相同的对象
Set hs = new HashSet() ;
Set ts = new TreeSet() ;
Poet p1 =new Poet ("李清照" ,25 );
Poet p2 =new Poet ("李清照" ,25 );
Poet p3 =new Poet ("苏轼" ,25 );
Poet p4 =new Poet ("苏轼" ,24 );
Poet p5 =new Poet ("苏轼" ,23 );
//打印结果
/*[苏轼, Score=25, 苏轼, Score=24, 苏轼, Score=23, 李清照, Score=25]
[苏轼, Score=23, 苏轼, Score=24, 李清照, Score=25, 苏轼, Score=25]*//
HashSet和TreeSet都剔除了相同的元素,HashSet是调用hashCode和equals方法完成的,而TreeSet是调用对象的comparaTo的方法完成的。TreeSet按照得分的大小从小到大排序,而HashSet没有这样的自然比较顺序。
Set的取出元素
Set没有取出get();的方法,所以只能用该机for循环或者迭代器Iterato来获取元素。Iterator有三个方法,iterator()得到迭代器,hashnext()判断下一个元素是否存在,next()取出一个元素并将脚标往下移一位。
Iterator it =ts .iterator (); //获取迭代器
while (it .hasNext ()){ //判断下一个元素是否存在
Poet po =( Poet )it .next (); //取出下一个元素
System . out. println( po );
}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。