黑马程序员--String类、集合框架

时间:2022-08-27 08:49:20

 ---------android培训java培训、期待与您交流! ----------       

 

一.String类:描述字符串事物

   1.概述:字符串是一个特殊的对象

    2.字符串最大的特点:对象一旦被初始化就不可以被改变

    3.常见操作:

         String str="abc abcdef";

        ①获取

              获取指定索引位置的字符,返回char:str.charAt(index);

              返回指定字符或字符串在字符或字符串中的位置,没找到返回-1:str.indexOf(char/String);

              从指定fromIndex位置开始查找指定字符或字符串,没找到返回-1:str.indexOf(char/String,int fromIndex);

              从字符串的尾部开始查找指定字符串,返回位置(索引) :str.lastIndexOf(String); 

        ②判断

              判断字符串是否包含某一串:str.contains("abc");

              判断字符串是否有内容:str.isEmpty(); 

              判断字符串是否以指定子串开头/结尾:str.startsWith("abc")/str.endsWith("ef"); 

       ③转换

              将字符数组转成字符串:String s = String(char[])

              将基本数据类型转换成字符串:String.valueOf(5)

              将字符串转成字符char[]数组:char[] ch=str.toCharArray();

        ④替换   replace(old,new):如果要替换的字符串不存在,返回原字符串,参数可以是char类型或String类型

        ⑤切割   str.split(","):按指定字符串切割,返回一个String[]数组

        ⑥子串   substring(begin,end) 包含begin不包含end,返回String

        ⑦去空格  str.trim() 首尾截空 

           转大小写   str.toUpperCase()、str.toLowerCase() 

           两字符串按自然顺序比较  compareTo() 返回 int  

 

二.StringBuffer容器:字符串缓冲区 ,StringBuffer sb=new StringBuffer();

     1.特点:长度可变,通过toString()方法变成字符串,线程同步

     2.常见功能:

        添加:sb.append("abc").append(2134),将数据添加到末尾

        删除:sb.delete(index1,index2),删除索引index1-index2的字符串,包含index1,不包含index2

        替换:sb.replace(int start,int end,String str),从start索引替换到end,不包含end,替换成指定字符串

        反转:sb.reverse();

    3.StringBuilder容器:1.5版本后,线程不同步,但效率高,所以开发最好使用StringBuilder,功能不变

    4.基本数据类型包装类:常用于基本数据类型和字符串类型转换

           特殊的两个类:Integer、Character对应的基本数据类型是int、char,而其他基本数据类型的包装类将首字母大写即可

           基本数据类型转成字符串类型:Integer.toString(34)、 Character.toString('a')   .....

           字符串类型转成基本数据类型:Integer.parseInteger("12344")、 Character.parseCharacter("a") .....

    5.基本数据类型包装类新特性:装箱、拆箱。

 

三.集合框架

   1.集合概述:集合中存储的是内存地址值

       ①Collection接口:常见子接口List接口、Set接口

       ②Map接口:常见子接口HashMap接口、TreeSet接口

    2.共性方法 

       add()添加元素remove()删除元素get()获取元素contains()/isEmpty()判断元素clear()清空元素retainAll()取元素交集

    3.迭代器(Iterator)

       用于取出元素。判断方法hasNext()、返回下一个元素的方法next().

              ....

              Iterator it = new ArrayList().iterator();

              while(it.hasNext()){

                    Object obj = (Object)it.next();

              }

      列表迭代器(ListIterator):List集合中特有的迭代器,是Iterator的子接口,可以并发访问元素

      在迭代器中,一个hasNext()对应一个next()

 

    4.List接口:元素有序可重复,由ArrayList类、LinkedList类实现

       List接口的共性方法:add()添加、remove()删除、set()修改、get()查询、subList()返回子集合

       ArrayList数组型,查询快,增删稍慢;ArrayList al = new ArrayList();

       LinkedList:链表型,增删快,查询稍慢;LinkedList list = new LinkedList();

           特有方法:

                 添加元素到集合的开始或末尾:addFirst()、addLast()

                 获取并删除开始或末尾的元素: removeFirst()、removeLast()

                 获取集合的第一位或最后一位: getFirst()、getLast()  

           JDK1.6版本后,出现了offerFirst()/peekFirst()/poolFirst(),如果列表为空,返回null,而不会抛出异常

       List集合判断元素是否相同:依据的是元素的equals()方法

 

    5.Set接口:元素无序,不可重复,由HastSet类、TreeSet类实现.

       HastSet:底层数据结构是哈希表,通过元素的hashCode()和equals()来完成唯一性

            //存入的元素为对象时,需复写hashCode()和equals()方法,先判断hashCode()再判断equals(),在此以Student对象为例

             ....

             public int  hashCode(){

                  return name.hashCode()+age*20;

             }

             public  boolean equals(Object obj){

                   if(! (obj instanceof Student)){

                       throw new RuntimeException("类型转换异常");

                   }

                   Student s = (Student)obj;

                   return this.name.equals(s.name)&&this.age==s.age;

             }

             ....

       TreeSet:底层数据结构是二叉树,可以对Set集合中元素排序

            两种排序方法:(在此元素对象以Student为例)

              (1)元素自身具备比较性,让其实现compareable接口,覆盖compareTo方法

                   ...

                   public int compareTo(Object obj){

                         if(!(obj instanceof Student))

                                    throw new RuntimeException("类型转换异常");

                         Student s = (Student) obj;

                         if(this.age>s.age)//判断主要条件

                                   return 1;

                         if(this.age==s.age)

                                   return this.name.compareTo(s.name);//次要条件

                         return -1;

                  }

                  //排序时,当主要条件满足时再判断次要条件

             (2)元素自身不具备可比性,这时需要创建一个比较器,让其实现Comparator接口,并复写compare()方法

                  ......

                  public int compare(Object o1, Object o2){

                                Student s1 = (Student) o1;

                                Student s2 = (Student) o2;

                                int num=s1.getName().compareTo(s2.getName());

                                if(num==0)

                                      return new Integer(s1.getAge()).compareTo(s2.getAge());

                                return num;

                  }

           小结:List中的remove()、contains()依赖于equals()方法

                    HashSet比较元素,先比较哈希值,再用equals()方法比较

                    TreeSet的两种排序都存在时,以定义比较器为主,即第二种方法

 

    6.泛型:JDK1.5后出现的新特性,用于解决集合的安全问题                  

          (1)好处:①将运行时异常转至编译时异常,让运行问题少避免了强制转换问题.

          (2)格式:通过<>括号来定义泛型

          (3)泛型类:泛型定义在类上(当类中要操作的引用数据类型不确定时使用泛型类)

                class Student<QQ>{...}//泛型QQ在整个类有效

          (4)泛型方法:泛型定义在方法上

                public <T> void show(T t){......}

                public static  <W> void show(W w){......} //特殊的泛型方法--静态泛型方法,必须在方法上先定义泛型<W>

         (5)泛型接口:interface Inter<T>{ ........ }

         (6)泛型限定:泛型占位符ArrayList<?>、上限限定ArrayList<? extends E>接收E的子类、下限限定ArrayList<? super E>接收E的父类

 

    7.Map集合

         (1)特点:存储都是一对键值对,而且键唯一,Map和Set相似,Set在底层就是使用了Map集合

         (2)实现类:

             HashTable:底层是哈希表结构,不可以存储null键null值,线程同步,但效率低

             HashMap:底层是哈希表结构,允许使用null键null值,线程不同步,效率高

             TreeMap:底层是二叉树,线程不同步,用于给Map键排序

         (3)方法:

              添加元素:put(),若前后加入的元素相同,后加入的元素会替换前一个元素

              获取元素: get(key),通过key获取value,如果key不存在,返回null

                   HashMap取出集合元素的两种方法:keySet()、enteySet()

                      HashMap map = new HashMap();

                      ......

                      Set<String> ks = map.keySet();//HashMap对象的keySet()方法返回Set<键>集合      

                      Iterator<String> it =  ks.iterator();

                      ......

                      Set<Map.Entry<key,value>> entrySet = map.entrySet();// HashMap对象的entrySet()方法返回Set<Map.Entry<key,value>>集合      

                      Iterator<Map.Entry<key,value>> it = entrySet.iterator();

                      while(it.hasNext()){

                              Map.Entry<key,value> me = it.next();

                               key k = me.getKey();

                               value v = me.getValue(); 

                      }

                      .....

 

     8.Map集合扩展:集合嵌套

            HashMap<key,HashMap<key1,obj2>> hm = newHashMap<key,HashMap<key1,obj2>>();

 

 ---------android培训java培训、期待与您交流! ----------