Learning java 03

1.字符串

1.字符串对象创建时是放在常量池中 String s = "abc"2.堆内存当中用 new 方法创建的String对象,然后存入 abc 对象,共两个对象: String s1 = new String("abc"); // 与1不等

3.s.equals(s1);  // true,重写Object中的equals,比较字符串内容,而不是地址

4.s==s1; // false,比较的是字符串地址

5.char[] arr = {'y','q','l'}
String s2 = new String(arr); // yql 字符数组转字符串

 2.索引

int indexOf(int ch) // 查找字符的索引
int indexOf(int ch, int fromIndex)
int indexOf(String str);  // 查找字符串的索引
int indexOf(String str, int fromIndex)
int lastIndexOf // 从后面开始找目标,返回从左开始数的索引
char charAt(int index) // 查找索引位置的值
String substring(int beginIndex, int endIndex) // 包含begin,不包含end,返回截取后的子串

 3.字符串切割及替换

split()
char[] toCharArray() // 转为字符数组
byte[] getBytes() // 转为字节数组,1字符=2字节,1中文GB2312=2字节
String toUpperCase() // 大写
String toLowerCase() // 小写
String replace(char oldch, char newch) // 参数可以是String s1, String s2
String trim()
String concat(String str)
static String copyValueOf(char[] data,...) // 将字符数组转为字符串
valueOf(String str) // 将类型比如数字转为字符串

 4.字符串比较

boolean equals // 比较内容
boolean equalsIgnoreCase // 忽略大小写的内容比较
boolean contains // 是否包含,1.5版本开始,与 indexOf 类似
boolean startsWith // 是否以指定字符串开头
boolean endsWith // 是否以指定字符串结尾
int compareTo(String anotherString)  // 按字典顺序比较,小于参数,返回负数;大于参数,返回正值;注意:基本数据类型使用 < > == 比较,而对象使用 compareTo

 5.StringBuffer 字符串缓冲区,存储数据的容器对象,长度可变,可以存储不同类型数据,最终都是转成字符串。

StringBuffer sb = new StringBuffer();
sb.append(4).append(false).append("ahah");  // 总是返回缓冲区StringBuffer sb,转成 String 使用 toString()
sb.insert(index, arg); // 插入
sb.delete // 删除不包含尾,清空缓冲区可以使用 sb.delete(0, sb.length()) 
sb.deleteCharAt(int index)  // 删除指定位置的元素

// 查找与 String 相同

// 修改
StringBuffer replace(start, end, newString)
void setCharAt(index, newChar)
sb.setLength(length)
sb.reverse() // 反转

6.StringBuffer 线程同步安全,代码块采用同步锁所以效率低。StringBuilder 1.5版本出现,等价 StringBuffer,线程不同步所以速度快。

       单线程推荐使用 StringBuilder,多线程 StringBuffer

7.基本数据类型对象包装类

byte      Byte
short     Short
int       Integer  

// Integer.MAX_VALUE 最大值,
// toBinaryString 转成二进制,
// parseInt(String str) 字符串转整数
long Long float Float double Double char Character boolean Boolean
基本类型 ---> 字符串
    1.基本类型数值 + ""
    2.用String类中的静态方法 valueOf(基本类型数值)
  3.用Integer.valueOf(基本数据类型)

字符串 ---> 基本类型
    1.使用包装类中的静态方法 Xxx.parseXxx("xxx类型的字符串")
    2.如果字符串被 Integer 进行对象的封装
        可以使用非静态方法 intValue() 将一个 Integer 对象转成基本数据类型值

Integer i = new Integer("123");
i.intValue(); // 123

8.进制转换

Integer.toBinaryString(60);  // 转2进制
Integer.toOctalString(60);   // 转8进制
Integer.toHexString(60);   // 转16进制
Integer.toString(int num, int radix) // 转成任意进制
Integer.parseInt(String intStr, int radix) // 其他进制转成radix进制

9.自动装箱

Integer x = 127; // jdk1.5 以后,如果装箱的是一个字节 -128 ~127 ,那么该数据会被共享,不会重新开辟空间,待验证

10.集合框架:用于存储对象的容器,长度可变,不可以存储基本数据类型值。与之比较的数组可以存储基本数据,但长度固定不变。

Collection接口方法
1.添加
       boolean add(Object obj);
       boolean addAll(Collection coll);

2.删除
       boolean remove(object obj)
       boolean removeAll(Collection coll);
       void clear();  // 删除所有元素,但集合依旧存在

3.判断
       boolean contains(Object obj);
       boolean containsAll(Collection coll);
       boolean isEmpty();   // 没有元素放回true

4.获取
       int size();  // 返回元素数
       Iterator  iterator();  // 取出元素的方法,迭代器

5.其他
       boolean retainAll(Collection coll);  // 取交集,与 removeAll 相反
       Object[] toArray();  // 将集合转成数组

 11.集合框架迭代器

集合类型  List Set

Collection coll = new ArrayList(); // List Set Collection  集合都有迭代器Iterator
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
for (Iterator it = coll.iterator(); it.hasNext();) { // 判断从0开始是否有元素,for 换成 while ,it 将还能使用
    System.out.println(it.next());  // 获取该元素
}
List coll = new ArrayList();  // list 额外获取成员的方法
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
for (int x=0; x<list.size(); x++) { 
    System.out.println(list.get(x)); 
}

 12.集合框架 Collection 接口的子接口

List:有序(存入和取出的顺序一致)元素都有索引,元素可以重复
Set:元素不能重复,无须

13.List特有的常见方法:有一个共性特点就是可以操作角标

1.添加
    void add(index, element);
    void add(index, collection);
2.删除
    Object remove(index);
3.修改
    Object set(index, element);
4.获取
    Object get(index);
    int indexOf(object);
    int lastIndexOf(object);
    List subList(from, to);  // 不包含尾

 14.注意事项:在迭代器Iterator操作过程中,不要使用集合 new ArrayList...add 操作元素,容易出现异常 java.util.ConcurrentModifiacationException 并发修改异常。可以使用 Iterator 接口的子接口 ListIterator 来完成在迭代中对元素进行更多的操作。

List list = new List();
list.add("abc1");
list.add("abc2");
list.add("abc3");

ListIterator it = list.listIterator();   // 获取列表迭代器对象

while(it.hasNext()) {
     Object obj = it.next();
     if (obj.equals("abc2")) {
          it.add("abc9");        // add或者set 等方法独属于 ListIterator,只有list集合具备该迭代功能
     }
}

// hasPrevious, previous 前面是否有东西

 15.List

--Vector 容器1:内部是数组数据结构,大小可变,同步,增删、查询都慢--ArrayList 容器2:内部是数组数据结构,大小可变,不同步,查询速度快。
--LinkedList 容器3:内部是链表数据结构,不同步,增删元素的速度很快。

 16.ArrayList可以添加不同的自定义对象,这些对象都为Object,实际开发中,为了避免输出为hash值或干脆报错,需要将Object向下强转。

public static void main(String[] args) {
     ArrayList a1 = new ArrayList();
     a1.add(new Person("list1", 21)); 
     a1.add(new Person("list2", 22));
   a1.add(5); // 自动装箱变为对象 new Integer(5) Iterator it
= a1.iterator(); while(it.hasNext()) { Sop(((Person) it.next()).getName()); // “.” 点的优先级次于括号,强转时括号的合理利用 } }

 17.自动装箱(结合第9点):基本数据类型赋给了引用数据类型,将会自动装箱。

 18.自动拆箱:当引用与基本数据类型计算的时候,将会自动拆箱。

posted @ 2019-12-04 11:04  blackatall  阅读(50)  评论(0)    收藏  举报