d10
String
- 常量
- 字符串池中
- “abc”+“def”
- 字符集就是编码,charset
- IDE下的默认字符集设置的就是项目的编码,和字符集是一个概念.
- 字符集:字符和数字的对照表
GB2312 中文字符集
GBK GB2312加强版
Big-5 繁体字符集
iso-8859-1 西欧码表
utf-8 国际化编码,可以表示任意文字
gbk
ascii < big-5 < utf-8
iso-8859-1
- 字符集在计算机中unicode码
c = '\u0098';
c = '中'
- 乱码过程
string str = "a中b";
str.getBytes();
- 字符串编解码
编码:把字符串变成字节数组
str -----> byte,str.getBytes()
解码:byte[] ---->str
- 字符在内存中都是unicode码
String,StringBuffer与StringBuilder的区别??
StringBuffer 字符串缓冲区
1.字符串缓冲区
2.mutable 可变的
3.java.lang.AbstractStringBuilder 继承与 java.lang.StringBuffer
public class StringBufferDe {
public static void main(String[] args){
StringBuffer buffer = new StringBuffer();
for(int i = 1 ; i <= 100 ; i ++){
buffer.append(i);
}
System.out.println(buffer.toString());
}
}
buffer.append 数组增加
public synchronized StringBuffer append(String var1) {
this.toStringCache = null;
super.append(var1);
return this;
}
buffer.delete 删除 前包后不包
public synchronized StringBuffer delete(int var1, int var2) {
this.toStringCache = null;
super.delete(var1, var2);
return this;
}
buffer.insert 插入
offset:偏移量
public synchronized StringBuffer insert(int var1, String var2) {
this.toStringCache = null;
super.insert(var1, var2);
return this;
}
buffer.reverse
public synchronized StringBuffer reverse() {
this.toStringCache = null;
super.reverse();
return this;
}
public class t11 {
public static void main(String[] args){
try{
StringBuffer buffer = new StringBuffer();
buffer.append("abc中国人def");
buffer.delete(4,6); // 前包后不包
//offset:偏移量
buffer.insert(0,"tom");
//
System.out.println(buffer.substring(0,3));
System.out.println(buffer.reverse());
System.out.println(buffer);
}catch (Exception e){
e.printStackTrace();
}
}
}
StringBuilder 字符串构建器
------------------------------
- 字符串构建器
- mutable可变的
- java.lang.AbstractStringBuilder{char[ ] value}
- 线程不安全
Builder模式
java设计模式
---------------
Idea中生成set get中的快捷方法
---------------
传统方式:
---------------
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public boolean isSex() {
return sex;
}
private boolean sex;
//...
}
public class BuilderDemo {
public static void main(String[] args){
Person p =new Person();
p.setName("atom");
p.setAge(12);
p.setSex(true);
}
}
================================
---------------------
Builder模式 构建器模式 方法链编程
---------------------
public Person setName(String name) {
this.name = name;
return this;
}
public Person setAge(int age) {
this.age = age;
return this;
}
public Person setSex(boolean sex) {
this.sex = sex;
return this;
}
Person p =new Person()
.setName("tom")
.setAge(12)
.setSex(true);
StringBuilder builder = new StringBuilder();
builder.append("t")
.append("o")
.append("m");
}
}
java基本数据类型
包装类.wrapper
在这里插入代码片
数字
byte
short
int
long
float
double
boolean
Boolean
char
character
========================
public class wrapperDemo {
public static void main(String[] args) {
Byte b = new Byte((byte)12);
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
Short s = new Short((short)12);
Integer i = new Integer(12);
Long l = new Long(12);
float f = new Float(12);
Boolean bb = new Boolean(true);
bb.booleanValue();
}
}
------------------------
基本类型和包装类区别
- 基本类(数值类型)有默认值0
- 包装类默认null
- 基本类型无法表达空的概念
- 基本类型不是对象
- 包装类是对象
- 基本类型可以直接参与运算int i = 5 ,j = 7 i+j;
- 包装类是对象,不能参与运算
Interger a = new Interager(12);
Interger b = new Interager(13);
a.intValue() + b.intValue()
------------------------
自动拆箱 自动装箱(jdk1.5以后)
装箱:将基本数据类型自动转变成包装类对象
拆箱:包装类----->基本数据类型auto
数组
- 元素类型必须相同(基本和引用都可以以)
- 长度固定
- 地址连续
- 通过下标访问,0基址
- null指针异常/索引越界异常
- 长度固定
集合
- 容器
- 长度可变
- 只能存储对象
- 元素类型可以不同
Collection接口有两个子接口:
List(列表),set(集)
LIst:可以存放重复元素,元素的存取是有序的
Set:不可以存放重复元素,元素的存取是无序的.
List 列表
ArrayList:查询快 一般添加删除慢
LInkLsit:查询慢 一般添加删除快
可以存放重复元素
有序的
ArrayList 通过下标定位
读快(查询快)
写慢
list.add(...)
list.get(int index)
list.remove(int index);
list.clear();
HashSet//线程不安全
HashMap//线程不安全
import org.w3c.dom.ls.LSInput;
import java.util.ArrayList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> List = new ArrayList<>();
System.out.println(List.size());
List.add("tom1");
List.add("tom2");
List.add("tom3");
List.add("tomsa");
List.add("tom5");
List.add("tom6");
List.add("tom7");
//元素的个数
System.out.println(List.size());
//得到索引
System.out.println(List.get(0));
//遍历List
for(int i = 0 ; i < List.size();i ++){
System.out.println(List.get(i));
}
System.out.println("==========================================");
//插入 牵一发动全身
List.add(0,"tom0");
//删除
List.remove(List.size()-1);
List.clear();//删除整个列表
System.out.println(List.get(0));
//遍历List
for(int i = 0 ; i < List.size();i ++){
System.out.println(List.get(i));
}
List<String> list2 = null;
List<String> lsit3 = new ArrayList<>();
System.out.println(List.indexOf("tomsa"));
}
}
//迭代器访问集合
Iterator<String> it = List.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
=============================================
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class PersonDemo {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Person p = new Person();
for(int i = 0 ;i < 1000; i++){
p = new Person();
p.setName("tom" + i);
p.setAge(i % 100);
list.add(p);
}
//迭代器遍历
Iterator<Person> it = list.iterator();
while (it.hasNext()){
Person p0 = it.next();
System.out.println("Person{"+p0.getName()+","+p0.getAge());
}
}
}
=================================
LinkedList 链表
通过手拉手实现对象的引用
存储数据快,查询慢
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class LinkdeListDemo {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("tom");
list.add(0,"alise");
list.add("bbb");
/*
for(int i = 0; i < list.size() ; i ++){
System.out.println(list.get(i));
}
*/
//迭代器遍历
Iterator<String> list0 = list.listIterator();
while (list0.hasNext()){
String str =list0.next();
System.out.println(str);
}
}
}
================================
public class StringDemo {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 ==s2);
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
}
}
=============================
***********迭代器***************
=============================
取出集合中元素的一种方式
因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器
注意
在Collection中是通用的,替代了Vector中的Enumeration(枚举)
next方法是向下自动取元素,避免出现NoSuchElementExecption
next方法返回类型是Object,注意类型转换
Set
- 元素不能重复
- 元素存储是无序的
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
//hash:散列,去重复
Set<String> set = new HashSet<String>();
set.add("tom");
set.add("tom");
set.add("tom1");
set.add("tom");
set.add("tom2");
System.out.println(set.size());
for(Iterator<String> it = set.iterator() ; it.hasNext();){
System.out.println(it.next());
}
}
}