记录下java的一些基础知识。。。
基础知识
集合
图片来源:菜鸟教程
集合主要包含单列集合和双列集合
-
Collection接口 -》子接口:List、Set -》实现类是单列,存储value
-
Map接口 -》实现类是双列,存储key-value
List
有序,可重复,允许多个Null元素对象
- 创建、新增元素
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println("list = " + list);
list.addAll(Arrays.asList("d","e","f"));
System.out.println("list = " + list);
// list = [a, b, c]
// list = [a, b, c, d, e, f]
- 删除元素
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
System.out.println("list = " + list);
list.remove("b");
System.out.println("删除 b 后的 list = " + list);
list.remove(0);
System.out.println("删除第 1 个元素后的 1list = " + list);
list.removeAll(Arrays.asList("c","d"));
System.out.println("删除 c d 后的元素 list = " + list);
list = [a, b, c, d]
删除 b 后的 list = [a, c, d]
删除第 1 个元素后的 1list = [c, d]
删除 c d 后的元素list = []
- 遍历
(1)使用iterator迭代器
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
System.out.println("list = " + list);
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.println("元素 = " + it.next());
}
// list = [a, b, c, d]
元素 = a
元素 = b
元素 = c
元素 = d
(2)增强for
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
System.out.println("list = " + list);
for (Object s : list) {
System.out.println("元素 = " + s);
}
(3)fori
for (int i = 0; i < list.size(); i++) {
System.out.println("元素 = " + list.get(i));
}
Set
无序,不可重复,最多允许有一个null元素
无序性:不等于随机性,存储的数据在底层并不是按照数据的索引的顺序添加。
会按照其内部算法将元素添加到合适的位置
- 创建、新增元素
Set set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
System.out.println("set = " + set);
set.addAll(Arrays.asList("d","e","f"));
System.out.println("set = " + set);
// set = [a, b, c]
// set = [a, b, c, d, e, f]
- 删除元素
Set set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set.addAll(Arrays.asList("d","e","f"));
System.out.println("set = " + set);
set.remove("a");
set.removeAll(Arrays.asList("d","e","f"));
System.out.println("删除后的 set = " + set);
// set = [a, b, c, d, e, f]
// 删除后的 set = [b, c]
因为 set 的无序性,所以set的删除元素无法根据 index 进行删除,也无法使用 fori 进行遍历。
- 遍历
(1)使用迭代器
Set set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
Iterator it = set.iterator();
while (it.hasNext()) {
System.out.println("元素 = " + it.next());
}
元素 = a
元素 = b
元素 = c
(2)增强for
Set set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
for (Object o : set) {
System.out.println("元素 = " + o);
}
Map
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("1", "c");
System.out.println("map = " + map);
//
map = {1=c, 2=b}
-
key相同,会替换掉前面的key和value的。value无限制。
-
想要修改value,直接put替换
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "a");
map.put("4", "a");
// 将key为1的,value修改成aaa
map.put("1", "aaa");
System.out.println("map = " + map);
//
map = {1=aaa, 2=b, 3=a, 4=a}
- 想要修改key,先remove,再put
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
// 将value为a的key"1"替换为key是111
if (map.containsKey("1")) {
String v = map.get("1");
map.remove("1");
map.put("111", v);
}
System.out.println("map = " + map);
//
map = {111=a, 2=b}
- 遍历
(1)方法一,使用entrySet获取到一个个entry键值映射关系:
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("entry = " + entry.getKey() + "---" + entry.getValue());
}
到这又脑热问自己,fori和增强for有啥不一样。这个也不懂咋的
单纯取数遍历:用增强for
还需要改变元素:用fori
(2)方法二,通过keySet,获取到key,在通过key获取value
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
for (String k : map.keySet()) {
System.out.println("map = " + k + "---" + map.get(k));
}
// 通过values可以获得map的v
for (String v : map.values()) {
System.out.println("v = " + v);
}
(3)方法三,使用Iterator
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("entry = " + entry.getKey() + "---" + entry.getValue());
}
(4)方法四,使用lambda
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
map.forEach((k, v) -> {
System.out.println(k + "---" + v);
});
lambda无法修改局部变量,也就是如果在这个map.forEach中,执行put或remove无法成功
单纯遍历:lambda效率更高些
还是推荐用entrySet,直接都取到key和value
可以看看我的学习——个人博客:
网站:http://www.fuzm.wang
—————————————————————————
很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。