---------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培训、期待与您交流! ----------