JAVA基本语法
JAVA面向对象
三大特征:
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。
多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。
JAVA包装类及String类 json数据格式
包装类:
包装类和基本数据类型转换:自动装箱自动拆箱
基本数据类型和String转换:
public static Xxx parseXxx(String s) //Xxx指的是,包装类对应的基本数据类型
String类
1. String,StringBuilder,StringBuffer三者的区别
区别主要是在两个方面,即运行速度和线程安全这两方面。
(1)运行速度(执行速度)速度快慢为:StringBuilder > StringBuffer > String
String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
(2)在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的
所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。
总结一下
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
2. String 比较方法(==和equals比较)
==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值;那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值:
json数据格式
Json与JAVA对象、map集合的转换
三方工具:Jackson
ObjectMapper mapper = getDefaultObjectMapper();
对象、list、map转化成json
String object2json = mapper.writeValueAsString(student1);
json转化成对象、list、map
json2object = mapper.readValue(object4json, Student.class);
三方工具:protobuf-java-format.jar包
使用:
从protobuf转json
Message someProto = SomeProto.getDefaultInstance();
String jsonFormat = JsonFormat.printToString(someProto);
从json转protobuf
Message.Builder builder = SomeProto.newBuilder();
String jsonFormat = load json from source;
JsonFormat.merge(jsonFormat, builder);
JAVA集合:List Set Map
总结:
ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。保证元素有序(自然排序和比较器排序)
List:有序(指增加顺序),可重复:查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
ArrayList:底层数据结构是数组;查询快,增删慢;线程不安全,效率高。
Vector:底层数据结构是数组;查询快,增删慢;线程安全,效率低。
LinkedList:底层数据结构是链表;查询慢,增删快;线程不安全,效率高。
Set:无序(指增加顺序),不重复;检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
HashSet:底层数据结构是哈希表;无序(元素顺序),不重复。依赖hashCode()和equals()保证唯一性
LinkedHashSet:底层数据结构是链表和哈希表,有序(元素顺序),不重复。由链表保证元素有序 由哈希表保证元素唯一
TreeSet:底层数据结构是红黑树;有序(元素顺序),不重复。
Map:储存键值对的数据
HashMap:线程不安全(性能稍高一点);HashMap可以使用null作为key(最多一个null),或Value(可有多个null)。
LinkedHashMap:比HashMap慢一点,维护链表来保持map中的key-value时的添加顺序。
Hashtable:线程安全(性能稍低一点);不允许使用null作为key和value。否则会报错“NullPointerException”。
TreeMap:比HashMap和HashTable慢(尤其是插入和删除),因为TreeMap底层采用红黑树管理key-value对。但用TreeMap使对象总是处于有序状态,也是其优势。