黑马程序员——Java集合基础知识之Collection

集合基础知识——Collection

Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成。

List接口的功能方法

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 );

}

黑马程序员——Java集合基础知识之Collection

时间: 2024-12-28 04:12:51

黑马程序员——Java集合基础知识之Collection的相关文章

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——java多线程基础知识1

多线程 进程是一个正在执行的程序. cpu在同时执行这些程序,其实是跳跃式的,做快速的切换,时间很短.一个进程可能存在多条路径.迅雷的多路径.每一个进行执行都有一个执行顺序,该顺序是一个执行路径,或这叫一个控制单元.每一个进程至少有一个线程,线程就是进程中的一个独立的控制单元,线程控制进程的执行.jvm启动的时候会有一个进程就叫做java,exe,该进程中至少有一个线程在控制Java程序的执行 ,而且该线程的执行代码在 主函数中.该线程称为主线程.虚拟机至少也有两个线程,一个主线程执行,另一个负

黑马程序员——Java多线程基础知识2

多线程协同 线程间的通讯:我们对资源的操作动作不同,比如说两个卡车一个拉煤一个装煤.但是他们共享了一个资源. 怎么样把这个资源拿出来?怎样把车装满?这个资源当然是一个类,他里面的组成元素就是对象!!现在我们就要有操作对象的思想了,我用对象把这车装满,现在一车装一个对象. 等待唤醒机制: 用的不是sleep是wait.flag标记,这是两人沟通的方式.其实每个标记就要做一次等待或者notify,判断wait,改值notify.线程池.notify唤醒里面的线程,按顺序唤醒.wait和notify必

黑马程序员——Java集合工具类和泛型

Collections工具类和泛型 Collections和Collection Collections和Collection是不同的,Collections是工具类,用来操作集合的,而Collection是集合接口.Collections中有一系列的静态方法用来操作集合,但是不能更改集合内容.比如不能set()不能remove()元素,可以替换全部元素或者添加同一个元素. static List<String> list =Arrays .asList("one Two three

黑马程序员---Java集合框架

---------------------- Android开发.java培训.期待与您交流! ---------------------- Java集合框架 集合我们都知道是用来储存对象的容器,那之前的数组不也可以储存对象么,为什么要出现集合呢? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,然而集合类中提供很多方便操作对象存储的方法,要比数组更容易操作对象,而且集合的长度是可变的,然而数组长度确实固定不变的,这样不利于对对象的间隔储存.  数组和集

黑马程序员——Java最基础纲要式总结

一.计算机基础知识 1. 软件开发: *什么是软件? 软件是一系列按照特定顺序组织的计算机数据和指令的集合.程序设计的最终结果是软件 系统软件:系统软件为计算机使用提供最基本的功能:如:DOS,Windows,Linux,Unix,Mac,Android,IOS 2.人机交互 图形化界面: 命令行方式 3.Java语言特征(跨平台) Java通过java虚拟机跨平台(JVM) 4.JDK.JRE.JVM之间的关系 JDK是整个java和核心,包括java的运行环境.java工具.java基础类库

黑马程序员——JAVA集合框架学习总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- www.itheima.com 要学好java的集合框架,必须掌握此图: Java集合框架很全面,从大的来说.它包括两种类型: 1.一种是以collection为根接口的集合. 2.另一种是由map为根接口的<key,value>的“图”. 而collection之下的set接口和list接口又有不同: 1.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制.

黑马程序员------Java集合框架学习总结

Java培训.Android培训.iOS培训..Net培训.期待您的交流 一.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类. 二.Collection接口 Collction: List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引.

黑马程序员——Java语法基础

一.关键字 1.定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有的字母都为小写. 2.分类 (1)用于定义数据类型的关键字:byte.short.int.long.float.double.char.boolean.class.interface.void (2)用于定义数据类型值的关键字:true.false.null (3)用于定义流程控制的关键字:if.else.switch.case.default.for.while.do.continue.break.ret