List、Set、Map的区别、有关String类

List、Set、Map的概念:

List和Set是存储单列数据的集合,Map是存储键和值这样的双列数据的集合;

List中存储的数据是有顺序,并且允许重复;

Map中存储的数据是无序的,其键是不能重复的,但是值是可以重复的;

Set中存储的数据是无序的,且不允许有重复,但元素在集合中的位置由元素的hashCode决定,
位置是固定的(Set 根据hashcode来进行数据的存储,所以位置是固定的,但是位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的);

实现类:

                         List接口有三个实现类

 LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。                                     
链表增删快,查找慢;

ArrayList:基于数组实现,非线程安全的,效率高,便于索引,但不便于插入删除;

Vector:基于数组实现,线程安全的,效率低

相关代码:

 List<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");
            list.add("d");
            System.out.println(list);
            System.out.println(list.get(1));
            System.out.println("List集合的遍历");
//            for (int i= 0;i<list.size();i++){
//                String s=list.get(i);
//                System.out.println(s);
//            }

            for (String s : list) {
            System.out.println(s);
             }



                 

                                  Map接口有三个实现类

HashMap:基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null键; 

 HashTable:线程安全,低效,不支持 null 值和 null 键;

LinkedHashMap: HashMap 的一个子类,保存了记录的插入顺序; 
                                                                                            
SortMap 接口: TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序;

相关代码:

 Map<String,Object> map = new HashMap<>();
        map.put("name","奈申博");
        map.put("age","20");
        map.put("phone","1523653936");
        map.put("address","河南省");
        System.out.println(map);
        System.out.println("map的集合遍历");
        Set<String> keySet = map.keySet();//获取map中所有key的值的set集合
        Iterator<String> ite = keySet.iterator();
        while(ite.hasNext()){
            String key = ite.next();
            Object value = map.get(key);
            System.out.println(key+"---->"+value);
        }

                           Set接口有两个实现类

HashSet:底层是由 HashMap 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hashCode()方法;
LinkedHashSet:继承与 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap;

相关代码:

Set<String> set = new HashSet<>();
        set.add("q");
        set.add("w");

        set.add("e");
        set.add("r");

        System.out.println(set);
        System.out.println("Set的集合遍历");
        Iterator<String> iterator= set.iterator();
        while (iterator.hasNext()){
            String s = iterator.next();
            System.out.println(s);

        }

区别:

List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,例如通过list.get(i)方法来获取集合中的元素;

Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;

Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如 TreeSet 类,可以按照默认顺序,也可以通过实现 Java.util.Comparator<Type>接口来自定义排序方式

String类

一、概念:

String表示字符串类型,属于 引用数据类型,不属于基本数据类型。

在java中随便使用 双引号括起来 的都是String对象。

ava中规定,双引号括起来的字符串,是 不可变 的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab

                                 字符串的不变性
1.字符串是常量,他们的值在创建之后不能更改,String类定义一个字符数组常量,一旦赋值不能更改字符的值
2.String类定义了常量字符数组,一旦赋值,这个字符数组的值不能被改变
3.经常需要变化的字符串建议使用StringBuffer定义

案例:

public class StringTest02 {
    public static void main(String[] args) {
        String s1 = "hello";
        // "hello"是存储在方法区的字符串常量池当中
        // 所以这个"hello"不会新建。(因为这个对象已经存在了!)
        String s2 = "hello";
        
        // == 双等号比较的是变量中保存的内存地址
        System.out.println(s1 == s2); // true

        String x = new String("xyz");
        String y = new String("xyz");
        
        // == 双等号比较的是变量中保存的内存地址
        System.out.println(x == y); //false
    }
}

字符串对象之间的比较不能使用“== ”,"=="不保险。应该调用String类equals方法。

二、构造方法:

                                构造方法名eg
String s = “xxx”最常用
 String(String original)String(“xxx”)
String(char数组,起始下标,长度)
String(byte数组)
String(byte数组,起始下标,长度)
String(StringBuffer buffer)
String(StringBuilder builder)

案例:

package com.lib.test01;

public class StringTest {
    public static void main(String[] args) {

            String s2= "nnn";//在内存中查找中查找是否存在nnn字符串,存在把该字符的地址放入s2线内存中
            System.out.println(s1==s2);

            s1="sss";//不是修改s1地址映射的字符串的内容,重新在内存中查找字符串,存在就赋值,不存在就创建后赋地址

        StringBuffer sb1 = new StringBuffer("zhansan");
        sb1.append("xxx");
        System.out.println(sb1);






    }
}

三、方法

 

案例:

class StringTest{
    public static void main(String[] args) {
        String s1 = "hello world";

        System.out.println(s1.charAt(6));//w

        String s2 = "abc";
        String s3 = "xyz";
        String s4 = "xyz";
        System.out.println(s2.compareTo(s3));//-23
        System.out.println(s3.compareTo(s4));//0
        System.out.println(s4.compareTo(s1));//16

        System.out.println(s2.equals(s3));//false

        System.out.println(s1.endsWith("world"));//true
        System.out.println(s1.endsWith("t"));//false

        String s5 = "HELLO worLD";
        System.out.println(s1.equalsIgnoreCase(s5));//true

        byte[] b = s1.getBytes();

        System.out.println(Arrays.toString(b));//[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

        System.out.println(s1.indexOf("world"));//6
        System.out.println(s1.indexOf("h"));//0

        System.out.println(s1.isEmpty());//false

        System.out.println(s1.length());//11

        String s6 = "javapythonc++cphpjavapython";
        System.out.println(s6.lastIndexOf("java"));//17
        System.out.println(s6.lastIndexOf("h"));//24

        String s7 = "name=zhangsan&age=18&sex=男";
        String newS7 = s7.replace("&", ";");
        System.out.println(newS7);//name=zhangsan;age=18;sex=男

        String[] splitS7 = s7.split("&");
        System.out.println(Arrays.toString(splitS7));//[name=zhangsan, age=18, sex=男]

        System.out.println(s6.startsWith("java"));//true
        System.out.println(s6.startsWith("python"));//false

        System.out.println(s6.substring(10));//c++cphpjavapython
        System.out.println(s6.substring(10, 13));//c++

        char[] charS6 = s6.toCharArray();
        System.out.println(Arrays.toString(charS6));//[j, a, v, a, p, y, t, h, o, n, c, +, +, c, p, h, p, j, a, v, a, p, y, t, h, o, n]

        System.out.println(s6.toUpperCase());//JAVAPYTHONC++CPHPJAVAPYTHON

        System.out.println(s5.toLowerCase());//hello world

        String s8 = "           你 好 世 界                   ";
        System.out.println(s8.trim());//你 好 世 界

        System.out.println("------------------------------");

        System.out.println(String.valueOf(123));//123
        System.out.println(String.valueOf(3.14));//3.14
        System.out.println(String.valueOf(true));//true
        System.out.println(String.valueOf(new Object()));//java.lang.Object@4554617c
        //valueOf会自动调用toString()方法

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值