集合的意义
程序的核心是数据,而数据的核心是存储和操作(增删改查),而java集合则是方便对数据进行存储和操作。
集合分为List、Set、Map,我们一个个来,今天先讲List
List是一个接口,他的实现类有ArrayList、LinkedList、Vector。
-
ArrayLisy
优点:实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。
缺点:插入删除效率低 - 首先建立一个student类。包含构造方法和打印方法
class Student {
String name;
String className;
float score;
public Student(String name, String className, float score) {
super();
this.name = name;
this.className = className;
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ", className=" + className + ", score=" + score + "]";
}
}
ArrayList的使用和相关方法。
- 声明公式:
ArrayList 自定义名字 = new ArrayList();
- ArrayList 实现List接口,底层是数组。查询很快、增删改慢。
add() 新增方法
- 可指定位置新增。
add(index, 新增数据)
public class Collections {
public static void main(String[] args) {
// 学生1
Student s1 = new Student("张三", "九零三", 80);
// 学生2
Student s2 = new Student("李四", "九零三", 20);
// 首先创建一个集合容器
ArrayList arrList = new ArrayList();
// 新增 使用add方法添加数据
arrList.add(s1);
arrList.add(s2);
arrList.add("中国");
arrList.add(123);
// 指定位置添加
arrList.add(2, "美国");
// 遍历集合
// for(数据类型 变量名: 集合或者数组 ) {};
for (Object a: arrList) {
System.out.println(a);
};
}
}
-
执行结果:
Student [name=张三, className=九零三, score=80.0]
Student [name=李四, className=九零三, score=20.0]
美国
中国
123
remove() 删除方法
- 可根据index删除
arrList.remove(3);
for (Object a: arrList) {
System.out.println(a);
};
-
打印结果:
Student [name=张三, className=九零三, score=80.0]
Student [name=李四, className=九零三, score=20.0]
美国
123
set() 修改方法
arrList.set(2, "中国最棒!");
for (Object a: arrList) {
System.out.println(a);
};
-
打印结果:
Student [name=张三, className=九零三, score=80.0]
Student [name=李四, className=九零三, score=20.0]
中国最棒!
123
get() 查询方法
System.out.println(arrList.get(0));
-
打印结果:
Student [name=张三, className=九零三, score=80.0]
addAll() 添加一个集合
ArrayList arrListTwo = new ArrayList();
arrListTwo.addAll(arrList);
for (Object a: arrListTwo) {
System.out.println(a);
};
-
打印结果
Student [name=张三, className=九零三, score=80.0]
Student [name=李四, className=九零三, score=20.0]
中国最棒!
123
clear() 清空方法
clone() 克隆方法
……
- 还有很多方法请自行补充学习。
ArrayList的迭代器和循环
- 重新在一个界面演示
public class IteratorJava {
public static void main(String[] args) {
/**
* 集合的迭代
*/
// 学生1
Student s1 = new Student("张三", "九零三", 80);
// 学生2
Student s2 = new Student("李四", "九零三", 20);
// 新建一个集合
List arrList = new ArrayList();
// 添加进去
arrList.add(s1);
arrList.add(s2);
}
}
while循环
Iterator its = arrList.iterator();
while (its.hasNext()) {
// 如果有数据的话取出来
Object obj = its.next();
System.out.println(obj);
}
for循环 (效率更高)
for(Iterator its1 = arrList.iterator(); its1.hasNext();) {
Object obj = its1.next();
System.out.println(obj);
}
高级循环
for(Object list : arrList) {
System.out.println(list);
}
- 执行结果都如下:
Student [name=张三, className=九零三, score=80.0]
Student [name=李四, className=九零三, score=20.0]
LinkedList
- LinkedList 实现List接口,底层是链表。查询慢,但是增删改很快
ArrayList和LinkedList 的效率及区别
public class Collections2 {
public static void main(String[] args) {
List listOne = new LinkedList();
List listTwo = new ArrayList();
// 起始时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
listOne.add("abc" + i);
};
long endTime = System.currentTimeMillis();
System.out.println("LinkedList循环需要时间:" + (endTime - startTime) + "ms");
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
listTwo.add("abc" + i);
};
long endTime1 = System.currentTimeMillis();
System.out.println("ArrayList循环需要时间:" + (endTime1 - startTime1) + "ms");
}
}
- 执行结果
LinkedList循环需要时间:1335ms
ArrayList循环需要时间:386ms
来个总结
/**
* 集合的种类之List
* List: 是一个接口,实现list接口的特点:
* * 元素是有顺序的,里面可以存放重复的元素
* * 这个接口中有实现类 ArrayList、 LinkedList、 Vector
* * * ArrayList 实现List接口,底层是数组。查询很快、增删改慢。
* * * LinkedList 实现List接口,底层是链表。查询慢,但是增删改很快
*/
上一章 | 目录 | 下一章 |
---|
网友评论