1、 为什么需要集合框架。
如果写程序时并不知道程序运行时会需要多少对象,或者,需要更复杂的方式存储对象,可以考虑使用JAVA集合框架。
2、 JAVA集合框架由以下三部分组成。
2.1、接口
Collection是最基本的集合接口,一个Collection代表一组元素。
List接口继承自Collection,List是有序集合,充许有相同的元素,使用List能够精确地控制每个元素插入的位置,用户能够使用索引来访问List中的元素,类似于数组。
2.2、具体类
实现List的常用类有ArrayList和LinkedList。它们都可以容纳所有类型的对象,包括null,并且都保证元素的存储顺序。
ArrayList实现了可变大小的数组。它的优点在于遍历元素和随机访问元素的效率比较高。
LinkedList提供了额外的addFirst()、addLast()、removeFirst()、removeLast()等方法,可以在LinkedList的或尾部进行插入或者删除操作。LinkedList采用双向列表存储数据。相较于ArrayList,在插入或删除元素时,LinkedList提供更好的性能。这些方法使得LinkedList可以被用作堆栈(stack)或者队列(queue)。
HashMap是Map接口的实现类,实现一个键到值映射的哈希表。
2.3、JAVA集合框架提供了类Collections,它提供了对集合进行排序等多种算法实现。
3、List接口和ArrayList类
List接口中常用方法
返回类型 | 方 法 | 说 明 |
boolean | add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始。 |
int | size() | 返回列表中的元素个数。 |
Object | get(int index) | 返回指定索引位置处的元素 注意:取出的元素是Object类型,使用前需要进行强类型转换。 |
void | add(int index,Object o) | 在指定的索引位置添加元素。注意:索引位置必须介于0和列表中元素个数之间。 |
boolean | contains(Object o) | 判断列表中是否存在指定元素 |
boolean | remove(Object o) | 从列表中删除元素 |
4、 List接口和LinkedList类
LinkedList中的一些方法
返回类型 | 方 法 | 说明 |
void | addFirst(Object o) | 在列表的首部添加元素 |
void | addLast(Object o) | 在列表的末尾添加元素 |
Object | getFirst() | 返回列表中的第一个元素 |
Object | getLast() | 返回列表中的最后一个元素 |
Object | removeFirst() | 删除并返回列表中的第一个元素 |
Object | removeLast() | 删除并返回列表中的最后一个元素 |
5、 Map接口和HashMap接口
HashMap的常用方法
返回类型 | 方法 | 说明 |
Object | put(Object key,Object value) | 以“键-值对”的方式进行存储。键必须是唯一的,值可以重复。如果试图添加重复的键,那么最后加入的键-值对将替换掉原先的键-值对。 |
Set | keySet() | 返回键的集合。 |
Collection | values() | 返回值的集合。 |
boolean | containsKey(Object key) | 如果存在由指定的键映射的“键-值对”,返回true。 |
Object | get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null。 |
Object | Remove(Object key) | 删除由指定的键映射的“键-值对”。 |
6、 toString()方法。
每个类都有toString()方法,从Object类继承而来,toString()方法代表一个类的字符串描述。当执行语句“System.out.println(类对象)”时,会默认调用该类的toString()方法。由于Object中的toString()方法用来输出类的内存地址等信息,因此,有时候为了特殊需要可以重写toString()方法,以便返回需要的内容。
-------------------------------------------------------------------------------
7、 例子代码
ArrayList:
package com.xinxin.testCollection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ArrayListTest {
public static void main(String[] args) {
FirstLevelTitle ft1 = new FirstLevelTitle(1,"待业","新新",new Date());
FirstLevelTitle ft2 = new FirstLevelTitle(2,"就业","大B炮",new Date());
FirstLevelTitle ft3 = new FirstLevelTitle(3,"已就业","超哥",new Date());
//List接口的实现类ArrayList
List newsTitleList = new ArrayList();
//向集合中添加元素
newsTitleList.add(ft1);
newsTitleList.add(ft2);
newsTitleList.add(1,ft3);
print(newsTitleList);
//判断集合中是否存在指定的元素ft3
if(newsTitleList.contains(ft3)){
System.out.println("包括已就业");
}else{
System.out.println("不包括已就业");
}
System.out.println("删除前、新闻标题数目为:"+newsTitleList.size());
//删除集合中的元素
newsTitleList.remove(0);
System.out.println("删除之后、新闻标题数目为:"+newsTitleList.size());
}
private static void print(List newsTitleList) {
for(int i=0;i<newsTitleList.size();i++){
FirstLevelTitle title = (FirstLevelTitle)newsTitleList.get(i);
System.out.println(i+1+":/nID:"+title.getId());
System.out.print("名称:"+title.getTitleName());
System.out.print("创建者:"+title.getCretor());
System.out.print("创建时间::"+title.getCreateTime()+"/n");
}
}
}
--------------------------------------------------------------------
FirstLevel:
package com.xinxin.testCollection;
import java.util.Date;
public class FirstLevelTitle {
private int id; //id
private String titleName; //名称
private String cretor; //创建者
private Date createTime; //创建时间
public FirstLevelTitle(int id,String titleName,String creator,Date createTime){
this.id = id;
this.titleName = titleName;
this.cretor = creator;
this.createTime = createTime;
}
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 getCretor() {
return cretor;
}
public void setCretor(String cretor) {
this.cretor = cretor;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
LinkedList:
package com.xinxin.testCollection;
import java.util.Date;
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
FirstLevelTitle ft1 = new FirstLevelTitle(1,"失业","阿强",new Date());
FirstLevelTitle ft2 = new FirstLevelTitle(2,"再次就业","麻子",new Date());
FirstLevelTitle ft3 = new FirstLevelTitle(3,"已经就业","阿希",new Date());
FirstLevelTitle ft4 = new FirstLevelTitle(3,"已经就业","阿峰",new Date());
LinkedList newsTitleList = new LinkedList();
newsTitleList.add(ft3);
newsTitleList.add(ft4);
//添加元素到集合中的首位
newsTitleList.addFirst(ft1);
//添加元素到集合中的某位
newsTitleList.addLast(ft2);
//获取第一条
FirstLevelTitle first = (FirstLevelTitle)newsTitleList.getFirst();
//获取最后一条
FirstLevelTitle last = (FirstLevelTitle)newsTitleList.getLast();
System.out.println("第一条的名称:"+first.getTitleName());
System.out.println("最后一条的名称:"+last.getTitleName());
//删除第一条
newsTitleList.removeFirst();
//删除最后一条
newsTitleList.removeLast();
System.out.println("还有"+newsTitleList.size()+"条");
}
}
Student:
package com.xinxin.testCollection;
public class Student {
private String name;
private String school;
public Student(String name,String school){
this.name = name;
this.school = school;
}
//重写Objext的toString()方法
public String toString(){
return name+"是"+school+"的";
}
}
Map:
package com.xinxin.testCollection;
import java.util.HashMap;
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Student student1 = new Student("新新","哈佛");
Student student2 = new Student("超哥","福地");
Map students = new HashMap();
//把英文名称与学员对象按照”键-值对“的方式存储在HashMap中
students.put("xinxin", student1);
students.put("chaoge", student2);
//分别打印键集、值集以及键=值对集合
System.out.println("键集:"+students.keySet());
System.out.println("值集:"+students.values());
System.out.println("键-值对集合::"+students);
String key = "xinxin";
//判断是否存在某个键,如果是,则根据键获取相应的值
if(students.containsKey(key))
{
System.out.println(students.get(key));
}
//根据键删除某条记录
students.remove(key);
System.out.println("键=值对集合:"+students);
}
}
创建一个类Queue,代表队列(特点:先进先出),添加add(Object obj)以及get()方法,添加main()方法进行效果验证。
import java.util.LinkedList;
public class Queue {
private LinkedList list = new LinkedList();
public void add(Object obj){
list.addLast(obj);
//list.addFirst(obj);
}
public Object get(){
return list.removeFirst();
//return list.removeLast();
}
public static void main(String[] args){
Queue q = new Queue();
q.add("first");
q.add("last");
System.out.println(q.get());
}
}