String是长字符,创建之后不能修改,每次修改都是创建新字符,stringBuffer和stringBuild 差不多,stringBuffer线程安全。stringBuilder不是线程安全。
public class TestStringAppend {
public static void main(String[] args) {
String s = "I love Java";
String str = "";
long start = System.nanoTime();
for (int i = 0; i < 100000; i++) {
str += s;
}
long end = System.nanoTime();
System.out.println("Time taken using String concatenation: " + (end - start) + " nanoseconds");
StringBuilder sbuffer = new StringBuilder();
long start1 = System.nanoTime();
for (int i = 0; i < 100000; i++) {
sbuffer.append(s);
}
long end1 = System.nanoTime();
System.out.println("Time taken using StringBuilder: " + (end1 - start1) + " nanoseconds");
StringBuffer sbuffer2 = new StringBuffer();
long start2 = System.nanoTime();
for (int i = 0; i < 100000; i++) {
sbuffer2.append(s);
}
long end2 = System.nanoTime();
System.out.println("Time taken using StringBuffer: " + (end2 - start2) + " nanoseconds");
}
}
运行结果如下
Time taken using String concatenation: 2250690542 nanoseconds
Time taken using StringBuilder: 2035292 nanoseconds
Time taken using StringBuffer: 2266000 nanoseconds
java 体系中,容器库分为collection 和 map,collection是存放一组各自独立的对象,map存放的是key value对象。list 和 set都是collection的子接口,list是有序可重复列表,set是无序,重复集合。
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("JavaScript");
for (String language : list) {
System.out.println(language);
}
}
}
Java
Python
C++
JavaScript
public class TestList {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("one");
set.add("two");
set.add("three");
set.add("four");
set.add("");
set.add("");
for (String number : set) {
System.out.println(number);
}
}
}
four
one
two
three
public class TestMap {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("name", "John43");
map.put("name", "John23");
map.put("name", "John12");
map.put("age", 30);
map.put("city", "New York");
for (Object key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
}
}
}
ArrayList是一个可以自动加容量,存放不同类的对象集合, 由于是实现自List, 因此能存放有序对象,插入删除操作比较费事,linkList比较方便插入,因为是链表,搜索查找首选arraylist,插入删除,首选linkList,vector是多线程安全的ArrayList。
public class TestArrayList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
list.add("Date");
for (String fruit : list) {
System.out.println(fruit);
}
System.out.println("Size of the list: " + list.size());
System.out.println("Element at index 2: " + list.get(2));
LinkedList<String> linkedList = new LinkedList<>();
linkedList.add("Apple");
linkedList.add("Banana");
linkedList.add("Cherry");
linkedList.add("Date");
for (String fruit : linkedList) {
System.out.println(fruit);
}
Vector<String> vector = new Vector<>();
vector.add("Apple");
vector.add("Banana");
vector.add("Cherry");
for (String fruit : vector) {
System.out.println(fruit);
}
}
}
hashtable 和 hashmap除了不同步,hashmap可以使用null作为键值,其他都差不多,hashtable是同步的,hashmap是不同步的。
程序可以访问检测和修改其本身的状态或者行为的一种能力
运行时判断一个对象的类型,构造任意一个对象,判断一个雷所具有的成员变量和方法。运行时可以调用任意一个对象的方法,甚至可以调用private。
public class TestReflect {
public static void main(String[] args) {
TestReflect tr = new TestReflect();
tr.test1();
}
public void test1(){
Class c = String.class;
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].getName() + " : " + methods[i].getReturnType());
}
Field[] fields = c.getDeclaredFields();
for(Field f:fields) {
System.out.println(f.getName() + " : " + f.getType());
}
}
}
public class TestReflect {
public static void main(String[] args) throws Exception {
TestReflect tr = new TestReflect();
// tr.test1();
tr.test2();
}
public void test1(){
Class c = String.class;
Method[] methods = c.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].getName() + " : " + methods[i].getReturnType());
}
Field[] fields = c.getDeclaredFields();
for(Field f:fields) {
System.out.println(f.getName() + " : " + f.getType());
}
}
public void test2 () throws Exception {
Class c = Class.forName("Student");
Student student = (Student) c.newInstance();
student.setName("John Doe");
student.setId(20);
student.show();
}
}
class Student {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void show() {
System.out.println("Name: " + name + ", ID: " + id);
}
}
public class TestReflect {
public static void main(String[] args) throws Exception {
TestReflect tr = new TestReflect();
tr.test4();
}
public void test4() {
try {
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls, 10);
Array.set(arr, 5, "this is a test");
String s = (String) Array.get(arr, 5);
System.out.println(s);
} catch (Exception e) {
System.err.println(e);
// TODO: handle exception
}
}
}
public class InputStream {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
System.out.println(s);
int i = sc.nextInt();
System.out.println(i);
}
}
public class GetPath {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));
System.out.println(Test.class.getClassLoader().getResource(""));
System.out.println(ClassLoader.getSystemClassLoader().getResource(""));
System.out.println(Test.class.getResource(""));
System.out.println(Test.class.getResource("/"));
System.out.println(new File("").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
}
}
public class md5 {
public static void main(String[] args) {
md5 md1 = new md5();
System.out.println(md1.digestString("liangjiq", "md5"));
}
private String digestString(String string, String string2) {
try {
MessageDigest md = MessageDigest.getInstance(string2);
md.update(string.getBytes());
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
System.out.println("MD5 Digest: " + sb.toString());
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return string2;
}
}