Java—基础知识


记录下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
—————————————————————————
很多知识都没有掌握,见谅,如有错误请指出,以期进步,感谢!。后续有新的学习,继续补充上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值