JAVA 2022.7.18课程总结

本文详细介绍了Java中的StringBuffer与StringBuilder工具类,解释了它们在字符串拼接中的作用和性能差异。接着,文章深入讲解了集合框架,包括List、Set、Map接口以及其实现类如ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap,分析了它们的特点和使用场景。此外,还提及了泛型的概念以及arrayCopy方法。
摘要由CSDN通过智能技术生成

一、StringBuffer、StringBuilder工具类

//StringBuffer线程安全
        StringBuffer strb=new StringBuffer();  

//StringBuilder线程不安全 优点:快  当对数据要求的安全性不高时使用
        StringBuilder strbu=new StringBuilder();

        /**
        为什么要有这两个工具类
        解决在拼接字符串过程中出现的中间量
        怎么解决?
        使用一个可扩容数组来保存所有的字符
        怎样扩容?
        默认情况 给与16长度字符数组,初始化
        不断添加,如果所需要的空间>当前所分配的空间 就需要扩容
        扩多大 原容量*2+2;
        如果扩容后的容量还不满足,要多大给多大
        新的容量就等于最小所需要的容量 
         */

        for(int i=97;i<123;i++) {
            strb.append((char)i);
        }
        System.out.println(strb.toString());

二、集合框架

1.集合


        Iterable(可迭代)接口:Collection集合接口: List Queue Set
         Map接口:HashMap TreeMap

        List:ArrayList LinkedList

        Set:HashSet  TreeSet

2.List

2.1 ArrayList解决两个问题    1.长度 扩容 2.类型问题Object

        //使用object数组来保存数据,解决类型问题
        //使用数组扩容解决数量问题
        //默认容量是10  扩容是 原长度+原长度/2

        List l1=new ArrayList();
        l1.add("你好");
        l1.add(12);  //存的是Integer
        l1.add(13);
        l1.set(0,"hello");
        System.out.println(l1);
        Iterator it=l1.iterator();
        Object obj;
        while(it.hasNext()) {
            obj=it.next();
            System.out.println(obj);
        }//打印l1元素

        System.out.println(l1.get(0));//获取0号元素并输出
        l1.remove(12);  //删除下标是12的元素 
        l1.remove(Integer.valueOf(12));//删除值为12
        System.out.println(l1.size());//获取list

    例题:1-100所有的奇数放到List中  在打印一遍
        List l1=new ArrayList();
        for(int i=0;i<100;i++) {
            if(i%2!=0) {
                l1.add(i);
            }
        }
        for(int i=0;i<l1.size();i++) {
            System.out.println(l1.get(i));
        }

2.2.LinkedList

      LinkedList使用双向链表
            List list=new LinkedList();
            list.add("你好");
            list.add("hello");
            list.add("张三");
            //获取元素,首先判断从哪一端开始检索能更快的找到元素
            //遍历获取节点,返回节点中记录的元素
            list.get(1);
            //set找到下标节点,将节点中的item重新指向
            list.set(1, "李四");
            //删除
            list.remove(1);

       ArrayList和LinkedList不同
        1.实现存储方式
            //ArrayList使用object数组来保存数据,解决类型问题
            //LinkedList使用双向链表
         2.检索方式
            //ArrayList从头检索
            //LinkedList获取元素,首先判断从哪一端开始检索能更快的找到元素
         3.ArrayList 查找快,增删慢  LinkList检索慢,增删快

   vector 是线程安全的list

2.Set 

       Set集合不能保存重复数据
       Set存储值是无序的(存的顺序和取的顺序是不一样的)

2.1 HashSet

    HashSet允许存放null值
        Set s1=new HashSet();
        s1.add("你好");
        s1.add(new String(new char[] {'你','好'}));//不会在存放
        s1.add("张三");
        
        System.out.println(s1.contains("你好")); //查找是否有该值,并打印
        
        Iterator it=s1.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        for(Object obj:s1) {
            System.out.println(obj);
        }

2.2 TreeSet

        //排序集合
        //不能存重复数据
        //Treeset中不可以放null值
        //tset.add(null);  运行错误
        //Treeset底层是使用TreeMap实现的,底层也是红黑树

                TreeSet tset=new TreeSet();
                tset.add(12.3);
                tset.add("张三"); //异常 类型不能转换

3.Map接口

3.1 HashMap.

//    HashMap使用数组加链表存储数据
//    键不能重复,重复就会覆盖
//    键和值都可以为null

        Map map=new HashMap();
        map.put("aaa","张三");
        map.put("ccc","zhang34");
        map.put("ddd","null");
        map.put(null,null);
        map.put("ccc",null);
        
        //打印aaa键的值
        System.out.println(map.get("aaa"));
        //获取所有的键名的集合
        Set keys=map.keySet();
        System.out.println(keys);
        //获取所有的值
        Collection values=map.values();
        System.out.println(values);
        //查询是否有该键
        map.containsKey("from");
        //查询是否有该值
        map.containsValue("张三");
        //删除aaa键和值
        map.remove("aaa");

3.2 TreeMap

     TreeMap值可以有多个null
     Treemap的key不能是null

        TreeMap tmap=new TreeMap();
        tmap.put("aaa",null);
        tmap.put("bbb",null);
        tmap.put(null,null);

4.Hashtable
        //Hashtable线程安全
        //Hashtable中的key值和value值都不能为null

        Hashtable table=new Hashtable();
        //table.put(null,"");
        //table.put("nihao",null);

5.arraycopy方法

        int[] arr= {1,2,3,4,5};
        int[] arr2=new int[20];

        //将arr中的2号元素开始复制到arr2中,从arr2中的15号元素开始替换arr中3个元素
        System.arraycopy(arr, 2, arr2, 15, 3);
        System.out.println(Arrays.toString(arr2));


三、泛型

public class Easy<T,A,B> {

    public static void main(String[] args) {
        //泛型?
        广泛的数据类型,允许使用时再来规范的数据类型
        Easy<String,Integer,Double> e=new Easy<String,Integer,Double>();
        e.test("");
    }
    public void test(T t) {
    }
    
    //在方法中指定泛型
    public static final <R extends List> R test2(R r) {
        return null;
    }

四、集合的补充

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值