您的位置:首页 > 编程语言 > Java开发

JAVA中的集合框架(ArrayList)

2018-03-12 21:56 274 查看
转帖请注明本文出自weimeig的博客(http://mp.blog.csdn.net/postedit/79533661),请尊重他人的辛勤劳动成果,谢谢
应朋友们反馈的JAVA基础薄弱的问题,决定出一套完整的JAVA基础教程,帮助大家复习,巩固JAVA基础,今天要讲的是JAVA中的集合框架。/**
* 学生类
* @author Administrator
*
*/
public class Student {
private String id;
private String name;
private Set course;
private Student(String id,String name){
this.id = id;
this.name = name;
this.course = new HashSet();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set getCourse() {
return course;
}
public void setCourse(Set course) {
this.course = course;
}
}
/**
* 课程类
* @author Administrator
*
*/
public class Course {
private String id;
private String name;
Course(String id,String name){
this.id=id;
this.name=name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
单个元素的插入import java.util.ArrayList;
import java.util.List;

/**
* 备选课程类
* @author Administrator
*
*/
public class ListTest {
/**
* 用于存放备选课程的List
*/
public List coursesToSelect;
public ListTest(){
this.coursesToSelect = new ArrayList();
}

/**
* 用于往coursesToSelect中添加备选课程
*/
public void testAdd(){
Course cr1 = new Course("1","数据结构");//new一个Course类的数据类型
coursesToSelect.add(cr1);//所为一条数据插入List中
Course temp = (Course)coursesToSelect.get(0);//获取LIst中的第一条数据,课程存入集合都变成Object类型,取出时需要类型转换
System.out.println("添加了课程:" + temp.getId() + temp.getName());
}
public static void main(String [] args)
{
ListTest lt = new ListTest();
lt.testAdd();
}
}
多个元素的同时插入
数组的集合插入,由单个元素的add方法,变成addAll方法import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* 备选课程类
* @author Administrator
*
*/
public class ListTest {
/**
* 用于存放备选课程的List
*/
public List coursesToSelect;
public ListTest(){
this.coursesToSelect = new ArrayList();
}

/**
* 用于往coursesToSelect中添加备选课程
*/
public void testAdd(){
Course cr1 = new Course("1","数据结构");//new一个Course类的数据类型
coursesToSelect.add(cr1);//所为一条数据插入List中
Course temp = (Course)coursesToSelect.get(0);//获取LIst中的第一条数据
System.out.println("添加了课程:" + temp.getId() + ":" + temp.getName());

Course cr2 = new Course("2","C语言");
coursesToSelect.add(0, cr2); //两个参数的add方法,选择插入元素的位置
Course temp2 = (Course) coursesToSelect.get(0);//将元素插入到第一条
System.out.println("添加了课程:" + temp2.getId() + ":" + temp2.getName());//观察打印的第一条的值

// 以下方法会抛出数组下标越界异常
// Course cr3 = new Course("3","test");
// coursesToSelect.add(4, cr3); //插入位置大于容量,数组下标越界

/**
* 多个元素的同时插入
*/
Course[] course = {new Course("3","离散数学"), new Course("4","汇编语言")};
coursesToSelect.addAll(Arrays.asList(course)); //添加数组用addAll
Course temp3 = (Course) coursesToSelect.get(2);
Course temp4 = (Course) coursesToSelect.get(3);

System.out.println("添加了两门课程:" + temp3.getId() + ":" + temp3.getName() +
";" + temp4.getId() + ":" + temp4.getName());

//按位置插入

Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};
coursesToSelect.addAll(2, Arrays.asList(course2));
Course temp5 = (Course)coursesToSelect.get(2);
Course temp6 = (Course)coursesToSelect.get(3);
System.out.println("添加了两门课程:" + temp5.getId() + ":" + temp5.getName() +
";" + temp6.getId() + ":" + temp6.getName());

}
public static void main(String [] args)
{
ListTest lt = new ListTest();
lt.testAdd();
}
}
查询元素的三种写法        /**
* 取得List中的元素的方法
* @param args
*/
public void testGet(){
int size = coursesToSelect.size();//创建一个Size变量用来接收Lisr的长度
System.out.println("有如下课程可选:");
for(int i=0;i<coursesToSelect.size();i++){
Course cr = (Course) coursesToSelect.get(i);
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}
/**
* 通过迭代器来遍历List
* @param args
*/
public void testIterator(){
//通过集合的方法,取得迭代器的实例。
Iterator it = coursesToSelect.iterator();
System.out.println("有如下课程可选(通过迭代器访问):");
while (it.hasNext()) {//it.hasNext如果含有元素就返回真值
Course cr = (Course)it.next();
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}
/**
* 通过for each方法访问集合元素
* 迭代器的简便写法
* @param args
*/
public void testForEach(){
System.out.println("有如下课程可选(通过for each访问):");
for(Object obj:coursesToSelect){//去遍历coursesToSelect集合中的每一个元素,把它取出来作为Object的一个变量
//(当一个元素存入到集合中的时候,他的类型是被忽略了的,集合只是拿他当Object用),当取出来的时候也是一个Object,因此
Course cr =(Course)obj;//当他取出来后,需要做强转
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}main函数中调用                ListTest lt = new ListTest();
                lt.testGet();
lt.testIterator();
lt.testForEach();
修改元素 /**
* 修改List中的元素
* @param args
*/
public void testModify(){
coursesToSelect.set(4, new Course("7","毛概"));//设置4位置的元素为:7,毛概
}删除元素        /**
* 删除List中的元素
* @param args
*/
public void testRemove(){
// Course cr = (Course) coursesToSelect.get(4);
// System.out.println("我是课程:" + cr.getId() + ":" +cr.getName() + "我即将被删除");
// coursesToSelect.remove(cr);
System.out.println("即将删除4位置上的课程!");
coursesToSelect.remove(4);
System.out.println("成功删除课程!");
testForEach();//调用前面写的遍历方法遍历数据
/**
* 同时删除多行时
*/
// System.out.println("即将删除4位置和5位置上的课程!");
// Course[] courses = {(Course) coursesToSelect.get(4),(Course) coursesToSelect.get(5)};//新建一个课程的数组将4位置和5位置的元素
// //加入到数组中
// coursesToSelect.removeAll(Arrays.asList(courses));///调用removeAll方法,通过asList工具类,把courses数组转化为集合作为参数传递进去
// testForEach();//调用前面写的遍历方法遍历数据
}main函数中调用       ListTest lt = new ListTest();
lt.testRemove();小节ListTest类完整代码import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
* 备选课程类
* @author Administrator
*
*/
public class ListTest {
/**
* 用于存放备选课程的List
*/
public List coursesToSelect;
public ListTest(){
this.coursesToSelect = new ArrayList();
}

/**
* 用于往coursesToSelect中添加备选课程
*/
public void testAdd(){
Course cr1 = new Course("1"
4000
,"数据结构");//new一个Course类的数据类型
coursesToSelect.add(cr1);//所为一条数据插入List中
Course temp = (Course)coursesToSelect.get(0);//获取LIst中的第一条数据
System.out.println("添加了课程:" + temp.getId() + ":" + temp.getName());

Course cr2 = new Course("2","C语言");
coursesToSelect.add(0, cr2); //两个参数的add方法,选择插入元素的位置
Course temp2 = (Course) coursesToSelect.get(0);//将元素插入到第一条,对象存入集合都变成Object类型,取出时需要类型转换
System.out.println("添加了课程:" + temp2.getId() + ":" + temp2.getName());//观察打印的第一条的值

coursesToSelect.add(cr1);//所为一条数据插入List中
Course temp0 = (Course)coursesToSelect.get(2);//获取LIst中的第一条数据
System.out.println("添加了课程:" + temp0.getId() + ":" + temp0.getName());

// 以下方法会抛出数组下标越界异常
// Course cr3 = new Course("3","test");
// coursesToSelect.add(4, cr3); //插入位置大于容量,数组下标越界

Course[] course = {new Course("3","离散数学"), new Course("4","汇编语言")};
coursesToSelect.addAll(Arrays.asList(course)); //添加数组用addAll
Course temp3 = (Course) coursesToSelect.get(3);
Course temp4 = (Course) coursesToSelect.get(4);

System.out.println("添加了两门课程:" + temp3.getId() + ":" + temp3.getName() +
";" + temp4.getId() + ":" + temp4.getName());

//按位置插入

Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};
coursesToSelect.addAll(2, Arrays.asList(course2));
Course temp5 = (Course)coursesToSelect.get(2);
Course temp6 = (Course)coursesToSelect.get(3);
System.out.println("添加了两门课程:" + temp5.getId() + ":" + temp5.getName() +
";" + temp6.getId() + ":" + temp6.getName());

}
/**
* 取得List中的元素的方法
* @param args
*/
public void testGet(){
int size = coursesToSelect.size();//创建一个Size变量用来接收Lisr的长度
System.out.println("有如下课程可选:");
for(int i=0;i<coursesToSelect.size();i++){
Course cr = (Course) coursesToSelect.get(i);
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}
/**
* 通过迭代器来遍历List
* @param args
*/
public void testIterator(){
//通过集合的方法,取得迭代器的实例。
Iterator it = coursesToSelect.iterator();
System.out.println("有如下课程可选(通过迭代器访问):");
while (it.hasNext()) {//it.hasNext如果含有元素就返回真值
Course cr = (Course)it.next();
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}
/**
* 通过for each方法访问集合元素
* 迭代器的简便写法
* @param args
*/
public void testForEach(){
System.out.println("有如下课程可选(通过for each访问):");
for(Object obj:coursesToSelect){//去遍历coursesToSelect集合中的每一个元素,把它取出来作为Object的一个变量
//(当一个元素存入到集合中的时候,他的类型是被忽略了的,集合只是拿他当Object用),当取出来的时候也是一个Object,因此
Course cr =(Course)obj;//当他取出来后,需要做强转
System.out.println("课程:" + cr.getId() + ":" + cr.getName());
}
}
/**
* 修改List中的元素
* @param args
*/
public void testModify(){
coursesToSelect.set(4, new Course("7","毛概"));//设置4位置的元素为:7,毛概
}
/**
* 删除List中的元素
* @param args
*/
public void testRemove(){
// Course cr = (Course) coursesToSelect.get(4);
// System.out.println("我是课程:" + cr.getId() + ":" +cr.getName() + "我即将被删除");
// coursesToSelect.remove(cr);
System.out.println("即将删除4位置上的课程!");
coursesToSelect.remove(4);
System.out.println("成功删除课程!");
testForEach();//调用前面写的遍历方法遍历数据
/**
* 同时删除多行时
*/
// System.out.println("即将删除4位置和5位置上的课程!");
// Course[] courses = {(Course) coursesToSelect.get(4),(Course) coursesToSelect.get(5)};//新建一个课程的数组将4位置和5位置的元素
// //加入到数组中
// coursesToSelect.removeAll(Arrays.asList(courses));///调用removeAll方法,通过asList工具类,把courses数组转化为集合作为参数传递进去
// testForEach();//调用前面写的遍历方法遍历数据
}
public static void main(String [] args)
{
ListTest lt = new ListTest();
lt.testAdd();
lt.testGet();
lt.testIterator();
lt.testForEach();
lt.testModify();
lt.testForEach();
lt.testRemove();
}
}那么,能否向集合中添加一些奇怪的元素呢?        /**
* 往集合中添加一些奇怪的东西
* @param args
*/
public void testType(){
System.out.println("能否往List中添加一些奇怪的东西呢?");
coursesToSelect.add("我不是课程,我只是一个无辜的字符串!!");
}调用 public static void main(String [] args)
{
ListTest lt = new ListTest();
lt.testAdd();
lt.testType();
lt.testForEach();
}
}很明显,抛出了异常。
那么,有没有一种方法可以控制数据的类型呢?
答案肯定是有的,那就是JAVA中的,泛型

下章泛型学习:http://blog.csdn.net/weimeig/article/details/79535182
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: