java集合框架:接口,实现类,算法
一、概述
接 口:表示集合的抽象数据类型,例如collection,list,set,map等。之所以定义多个接口,是为了以不同的
方式操作集合对象
实现类:集合框架中的具体的实现类,例如:ArrayList,LinkedList,,HashSet,HashMap
算 法:是对实现接口的对象执行计算的方法,提供了对集合进行排序、遍历等多种算法
二、下面细分讲解(接口,实现类和算法)
接口:
collection 接口存储一组不唯一,无序的对象
List 接口存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
Map 接口存储一组键值对象,提供key(键)到value(值)的映射实现类:
``````collection接口不赘述,此处省略n多个字。
(1)常用的List接口实现类有ArrayList 和LinkedList 两个。且都可以容纳所有类型的对象,
包括null,允许 重复,并且都保证元素的存储循序
1、ArrayList 实现了长度可变的数组,在内存中分配连续的空间.so遍历元素和随机访问元素的效率比较高
Booleanadd(Object o) 说明:在列表末尾顺序添加元素,起始索引位置从0开始
Object get(int index) 说明:返回指定索引位置处的元素,取出的是Object类型,使用时强制类型转换
int size() 说明:返回列表中元素个数
实例:(此处的实体类复用在LinkedList实例中)
//实体类开始
public class NewTitle{
private int id;
private String titleName;
private String creater;
public NewTitle(){
}
public NewTitle(int id,String titleName,String creater){
this,.id=id;
this.titleName=titleName;
this.creater=creater;
}
Public int getId(){
Return id;
}
Public void setId(int id){
this.id=id;
}
Public String getTitleName(){
return titleName;
}
Public void setTitleName(String titleName){
this.titleName=titleName;
}
Public String getCreater(){
return creater;
}
Public void setCreater(){
this.creater=creater;
}
}
//实体类结束
//主函数
Public class NewTitle{
Public static void main(String[] args){
NewTitle car =new NewTitle(1,”汽车”,”管理员”);
NewTitle test =new NewTitle(1,”高考”,”管理员”);
List newsTitleList=new ArrayList();
newsTitleList.add(car);
newsTitleList.add(test);
system.out.println(“新闻标题的数目为:”+newsTitleList.size()+”条”);
for(int i=0;i<newsTitleList.size();i++){
NewTitle title=(NewsTitle)newsTilteList.get(i);
system.out.println ((i+1)+”:”+title.getTitleName());
};
}
}
2、LinkedList 采用链表式存储方式。插入、删除元素时效率比较高
void addFirst(Object o) 说明:在列表的首部添加元素
void addLast(Object o) 说明:在列表的末尾添加元素
Object getFirst() 说明:返回列表的第一个元素
Object getLast() 说明:返回列表中的最后一个元素
Object removeFirst() 说明:删除并返回列表中的第一个元素
Object removeLast() 说明:删除并返回列表中的最后一个元素
实例:(先加上ArrayList中的实体类,再加上下面的主函数)
Public class NewTitleDemo{
Public static void main(String[] args){
NewTitle car =new NewTitle(1,”汽车”,”管理员”);
NewTitle test =new NewTitle(1,”高考”,”管理员”);
LinkedList newsTitleList=new LinkedList();
newsTitleList.addFirst(car);
newsTitleList,.addLast(test);
NewsTitle first= (NewTitle) newsTitleList.getFirst();
NewsTitle last= (NewTitle) newsTitleList.getLast();;
newsTitleList.removeLast();
for(int i=0;i<newsTitleList.size();i++){}
NewTitle title=(NewTitle)newsTitleList.get(i);
system.out.println ((i+1)+”title.getTitleName()”);
}
}
(2)Set接口存储一组唯一,无序的对象、 特点 :集合中的对象,并不按照特定的方式排序,
并且不能保存重复的对象
HashSet是Set接口的常用实现类。而set接口继承collection接口,同时没有添加新的方法,所以在
使用上与List接口的实现类使用方法一致。但是,Set方法中,不存在get方法,即没有List接口中通
过索引取值的方法,进而,有一个问题:没有get方法,Set集合,要怎么遍历输出呢 ???
————迭代器,Iterator接口,Iterator接口:表示对集合进行迭代的的迭代器
hasNext():方法判断是否还有元素可以迭代。
Next():返回迭代的下一个元素。
集合对象.iterrator();
//只修改主函数中的部分代码
NewTitle car =new NewTitle(1,”汽车”,”管理员”);
NewTitle test =new NewTitle(1,”高考”,”管理员”);
Set newsTitleSet=new HashSet();
newsTitleSet.add(car);
newsTitleSet.add(test);
system.out.println (“新闻标题为”+newsTitleSet.size()+”条”);
Iterater iterator=newTitleSet.iterator();
While(iterater.hasNext()){
NewTitle title=(NetTitle)iterator.next();
system.out.println (title.getTitleName());
}
(3)Map接口
Map接口表示一组成对的键值映射对象,保存一个键到一个值的映射,通过键操作值,
Map接口最常用的实现类是HashMap,,(自己感觉,这个键key,相当于数据库的数据编号,唯
一名字,但是可以包含一个杂数据类型的对象)
Object put(Object key,Object value);
Objectget(Object key);
Boolean containsKey(Object key);
//只修改主函数的部分源代码
Student student1=new Student(“黎明”,”男”);
Student student2=new Student(“刘丽”,”女”);
Map studentMap=new HashMap();
studentMap.put(‘jack’,student1);
studentMap.put(‘rose,student2);
sysout(‘打印键集:’+studentMap.keySet());
sysout(‘打印值集:’+studentMap.values());
sysout(‘打印键值集:’+studentMap);
String key=”jack”;
If(studentMap.containsKey(key)){
Student student=(Student)studentMap.get(key);
Sysout(“学员的姓名:”+student.getName());
}
算法(对集合操作的算法):
Java集合框架将针对不同数据结构算法的实现都保存在工具类中utilites:Collections
和Arrays,,,,Arrays定义了用来操作数组的各种方法,,,Collections类定义了一系列用于操作
集合的工具方法,也就是说,不必实例化Collections类就可以使用的方法