我的Java学习笔记
集合
文章目录
1.集合框架
1.1存在了数组为什么要使用集合?
1 数组的长度是不可变的
2 数组是存储相同数据类型的
3 数组中删除数据后 当前位置为空 不利于后续的操作
1.2 集合框架图
2.ArrayList集合使用
2.1添加元素
ArrayList 类提供了很多有用的方法,添加元素到 ArrayList 可以使用 add() 方法:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
sites.add(1,"Baidu"); //把数据插入到指定位置
System.out.println(sites);
}
}
2.2 访问元素
访问 ArrayList 中的元素可以使用 get() 方法:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites.get(1)); // 访问第二个元素
}
}
2.3 修改元素
如果要修改 ArrayList 中的元素可以使用 set() 方法:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
sites.set(2, "Wiki"); // 第一个参数为索引位置,第二个为要修改的值
System.out.println(sites);
}
}
2.4 删除元素
如果要删除 ArrayList 中的元素可以使用 remove() 方法:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
sites.remove(3); // 删除第四个元素
System.out.println(sites);
sites.remove("Weibo"); //删除指定元素
}
}
2.5 获取长度
如果要计算 ArrayList 中的元素数量可以使用 size() 方法:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites.size());
}
}
2.6 迭代数组列表
我们可以使用 for 来迭代数组列表中的元素:
import java.util.ArrayList;
public class RunoobTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
//普通for循环
for (int i = 0; i < sites.size(); i++) {
System.out.println(sites.get(i));
}
//增强for循环
for (String i : sites) {
System.out.println(i);
}
}
}
2.7 判断集合是否为空
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("毛毅");
list.add("吴志文");
list.add("刘昊冰");
list.add("董洪成");
list.add("冯超");
System.out.println(list.isEmpty());
}
}
2.8 集合中是否包含
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("xx");
list.add("xxx");
list.add("xxx");
list.add("xxx");
list.add("xx");
System.out.println(list.contains("xx"));
}
}
2.9 泛型的使用
public class Test {
public static void main(String[] args) {
//泛型的使用规定了集合中存储的数据类型
List<String> list = new ArrayList<String>();
list.add("xx");
list.add(123); //编译错误
list.add(boolean);//编译错误
list.add(5.5);//编译错误
list.add("xx");
}
}
3.LinkedList , ArrayList区别
3.1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
3.2、效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
4.HashSet
4.1 实例化HashSet并且使用
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> hashSet = new HashSet<String>();
//add(Objet obj) 插入数据到尾部
hashSet.add("张三");
hashSet.add("李遂");
hashSet.add("毛毅");
//remove(Object obj) 删除指定元素
hashSet.remove("张三");
for (String string : hashSet) {
System.out.println(string);
}
}
}
4.2 HashSet的特点
hashset相对于插入顺序来说是无序的。但是hashSet会被所有的插入的数据进行排序,相对于本身来说是有序的。
hashSet中的数据不可重复
hashSet允许为空值(null)
5.TreeSet
5.1 TreeSet的使用
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<String>();
treeSet.add("CHINA");
treeSet.add("CHINA");
treeSet.add("CHINESE");
treeSet.add("USA");
treeSet.add("JAPAN");
for (String string : treeSet) {
System.out.println(string);
}
}
}
5.2 Treeset的特点
底层使用tree进行存储
因为treeset本身要做排序操作,所以相对于插入顺序来说是无序的。
插入的数据不可能重复
不能插入空值(null)
6.Collections工具类
Collections和Collection区别
Collection是集合顶层接口
Collections是针对集合一个工具类,提供了一些方法来操作集合,此类中的方法都是静态的
6.1 sort方法
public class ColletionsTest {
public static void main(String[] args) {
ArrayList<Integer> listint = new ArrayList<Integer>();
listint.add(5);
listint.add(4);
listint.add(9);
listint.add(55);
listint.add(2);
Collections.sort(listint);
for (Integer integer : listint) {
System.out.println(integer);
}
ArrayList<String> liststring = new ArrayList<String>();
liststring.add("A");
liststring.add("a");
liststring.add("e");
liststring.add("b");
liststring.add("g");
liststring.add("B");
Collections.sort(liststring);
for (String string : liststring) {
System.out.println(string);
}
}
}
//sort方法重载两个具体的方法
// sort(List list) 对List接口下的所有的实现类进行排序
// 但是只能对基本数据类型的包装类和String进行排序
// sort(List list,Comparator com) 使用比较器进行排序 在标题7中详细讲解
6.2 reverse方法
public class ColletionsTest {
public static void main(String[] args) {
ArrayList<String> liststring = new ArrayList<String>();
liststring.add("A");
liststring.add("a");
liststring.add("e");
liststring.add("b");
liststring.add("g");
liststring.add("B");
// 对集合中的元素进行反转
Collections.reverse(liststring);
for (String string : liststring) {
System.out.println(string);
}
}
}
6.3 shuffle方法
public class ColletionsTest {
public static void main(String[] args) {
ArrayList<String> liststring = new ArrayList<String>();
liststring.add("A");
liststring.add("a");
liststring.add("e");
liststring.add("b");
liststring.add("g");
liststring.add("B");
// 打乱集合中的顺序
Collections.shuffle(liststring);
for (String string : liststring) {
System.out.println(string);
}
}
}
7.使用Collections工具类对ArrayList排序
Collections工具类中的sort无法对自定义对象进行排序,所以需要手动完成排序。
7.1 Comparable接口
public class Emp implements Comparable<Emp> {
@Override
public int compareTo(Emp o) {
// TODO Auto-generated method stub
return (int)(o.emoney-this.emoney);
}
}
7.2 Comparator接口
//创建一个比较类实现Comparator接口
public class EmpComparator implements Comparator<Emp> {
@Override
public int compare(Emp emp, Emp emp2) {
// TODO Auto-generated method stub
return (int)(emp.getEmoney()-emp2.getEmoney());
}
}
//使用sort方法
//sort(List list,Comparator com) 使用比较器进行排序
public static void main(String[] args) {
ArrayList<Emp> list = new ArrayList<Emp>();
EmpComparator ec = new EmpComparator();
Emp emp = new Emp(101, "xx", 18000);
Emp emp2 = new Emp(102, "老曹", 860);
Emp emp3 = new Emp(103, "xxx", 1800000);
list.add(emp);
list.add(emp2);
list.add(emp3);
Collections.sort(list, ec);//完成排序
}