通过学习了 Java 中的集合类,了解到集合类是 Java 数据结构的实现。Java的集合类是在 java.util 包中,它允许以各种方式将元素分组,并定义了各种方法使这些元素更容易操作。
集合类型
1.一种是集合(Collection),存储一个元素集合。
2.一种是图(Map),存储键/值对映射。
集合框架
- 接口:是集合的抽象数据类型,如: Collection、List、Set、Map 等。
- 实现类:是集合接口的具体实现,如:ArrayList、LinkedList、HashSet、HashMap等。
- 算法:是实现集合接口的对象里的方法执行的一些有用的计算。
List和Set区别
- List 接口实例存储的是有序的,可以重复的元素,允许多个null。Set 接口实例存储的是无序的,不重复的数据,允许null。
- List类似数组,大小可以动态增长,查找效率高,插入和删除效率低。
- Set 查找效率低下,插入和删除效率高。
ArrayList 类
ArrayList 类是一个可以动态修改的数组,线程同步不安全,继承了 AbstractList ,并实现了 List 接口。
public class ArrayListDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
ArrayList<Integer> list = new ArrayList<Integer>();
// 添加元素
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
// 修改元素
list.set(1, 5); // 第一个参数为索引值,第二个为要修改的值
System.out.println(list);
// 删除元素
list.remove(2);
System.out.println(list);
// 获取第二个元素
int val = list.get(1);
System.out.println(val);
// 获取大小
int len = list.size();
System.out.println(len);
// 循环列表,可以使用 for 或者 for-each 迭代元素
for (Integer i : list) {
System.out.println(i);
}
}
}
其它一些常用方法:clear,clone,indexOf,isEmpty,sort,forEach等。
LinkedList类
LinkedList 是一种线性表,是一种常用的数据容器;增加和删除的操作效率较高,而查找和修改的操作效率较低。
通常在以下情况下使用:通过循环迭代来访问列表中的某些元素;频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
public class LinkedListDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
LinkedList<Integer> list = new LinkedList<Integer>();
// 添加元素
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
// 在头部添加元素
list.addFirst(0);
System.out.println(list);
// 在尾部添加元素
list.addLast(10);
System.out.println(list);
// 修改元素
list.set(1, 5); // 第一个参数为索引值,第二个为要修改的值
System.out.println(list);
// 删除元素
list.remove(2);
System.out.println(list);
// 获取第二个元素
int val = list.get(1);
System.out.println(val);
// 获取大小
int len = list.size();
System.out.println(len);
// 循环列表,可以使用 for 或者 for-each 迭代元素
for (Integer i : list) {
System.out.println(i);
}
}
}
其它一些常用方法:clear,removeFirst,poll,indexOf,peek,clone,toArray等。
HashSet类
HashSet 是一个不允许有重复元素的集合,是无序的,允许有 null 值,是线程不安全的。
public class HashSetDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashSet<Integer> list = new HashSet<Integer>();
// 添加元素
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
// 删除元素
list.remove(3);
System.out.println(list);
// 判断是否存在
boolean isExist = list.contains(1);
System.out.println(isExist);
// 获取大小
int len = list.size();
System.out.println(len);
// 循环列表,可以使用 for 或者 for-each 迭代元素
for (Integer i : list) {
System.out.println(i);
}
// 清空所有元素
list.clear();
System.out.println(list);
}
}
HashMap类
HashMap 是散列表,存储的内容是键值对(key-value);实现了 Map 接口,访问速度快;是无序的;最多允许一条记录的键为 null,不支持线程同步。
HashMap 实现了 Map、Cloneable、java.io.Serializable 接口。
public class HashMapDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
HashMap<String, String> list = new HashMap<String, String>();
list.put("name", "java");
list.put("price", "120");
list.put("auth", "Taobao");
System.out.println(list);
// 获取元素
String str = list.get("name");
System.out.println(str);
// 删除元素
list.remove("name");
System.out.println(list);
// 获取大小
int len = list.size();
System.out.println(len);
// 循环列表,可以使用 for-each 迭代元素
for (String i : list.keySet()) {
System.out.println("key: " + i + ", value: " + list.get(i));
}
// 返回所有 value 值
for(String value: list.values()) {
System.out.print(value + ", ");
}
// 清空所有元素
System.out.println();
list.clear();
System.out.println(list);
}
}
其它一些常用方法:clear,clone,isEmpty,replace,containsKey,containsValue,forEach,values等。
温馨提示
文章内容如果写的存在问题欢迎留言指出,让我们共同交流,共同探讨,共同进步~~~
文章如果对你有帮助,动动你的小手点个赞,鼓励一下,给我前行的动力。