自律·財大自習·Java

程式碼牛發表於2019-03-26

自十萬個為什麼之後。。。

一、Java 基礎

1.JDK 和 JRE 和 JVM 有什麼區別?(來源百度)

JDK
JDK:Java Development Kit
含義:Java開發工具包

自律·財大自習·Java


JRE
全名:Java runtime environment
含義:Java執行環境

自律·財大自習·Java


JVM
全名:Java Virtual Machine
含義:Java虛擬機器

自律·財大自習·Java

2.== 和 equals 的區別是什麼?

①基本資料型別(也稱原始資料型別) :byte,short,char,int,long,float,double,boolean。他們之間的比較,應用雙等號(==),比較的是他們的值。
②引用資料型別:當他們用(==)進行比較的時候,比較的是他們在記憶體中的存放地址(確切的說,是堆記憶體地址)。

3.以下兩種中初始化方法str = new String("hello"),str = "hello"的記憶體分配,以及區別?

String str1 = new String("hello");
String str2 = "hello";
String str3 = "hello";
複製程式碼

此時在建立str3的時候會去檢查常量池裡面是否有"hello"這個字串,如果有的話則不建立,直接地址指向。
String str="";這種方式建立的字串都是在常量池中存在。
new String("")來建立的字串都是在堆中開闢空間

?注:常量池:常量池(constant pool)指的是在編譯期被確定,並被儲存在已編譯的.class檔案中的一些資料。它包括了關於類、方法、介面等中的常量,也包括字串常量。

1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制.
2. :存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)或者常量池中(字串常量物件存放在常量池中。)
3. :存放所有new出來的物件。
4. 靜態域:存放靜態成員(static定義的)
5. 常量池:存放字串常量和基本型別常量(public static final)
6. 非RAM儲存:硬碟等永久儲存空間

4.介面、普通類、抽象類的區別以及用法?

⭐普通類 與 抽象類:
1、普通類可以去例項化呼叫;抽象類不能被例項化,因為它是存在於一種概念而不非具體。
2、普通類和抽象類都可以被繼承,但是抽象類被繼承後子類必須重寫繼承的方法,除非自類也是抽象類。


⭐抽象類 與 介面:
1、抽象類 和 介面 都是用來抽象具體物件的. 但是介面的抽象級別最高
2、抽象類可以有具體的方法 和屬性, 介面只能有抽象方法和不可變常量
3、抽象類主要用來抽象類別,介面主要用來抽象功能.
4、抽象類中,且不包含任何實現,派生類必須覆蓋它們。介面中所有方法都必須是未實現的。
5、介面是設計的結果 ,抽象類是重構的結果

?使用方向:當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用介面。

二、容器

自律·財大自習·Java

自律·財大自習·Java

1.List、Set、Map集合

ArrayList

建立初始化:4種方式

public static void main(String[] args) {
	/**
	 * Arrays.asList方法初始化
	 */
	List<String> list1 = new ArrayList<String>(Arrays.asList("str1","str2","str3"));
	
	/**
	 * 雙大括號初始化(double brace initialization)或者匿名內部類初始化法
	 * 這種方法一定程度上使程式碼更簡潔,但同時可能降低可讀性;
	 * 使用雙大括號初始化會導致內部類檔案的產生,而這個過程就會影響程式碼的執行效率;
	 * ⭐不推薦使用
	 */
	@SuppressWarnings("serial")
	List<String> list2 = new ArrayList<String>(){{
		add("str1");
		add("str2");
		add("str3");
	}};
	
	/**
	 * 普通初始化
	 */
	List<String> list3 = new ArrayList<>();
	list3.add("str1");
	list3.add("str2");
	list3.add("str3");
	
	/**
	 * Collections.ncopies初始化
	 * 把element複製count次填入list4中
	 */
	int count = 5;
	String element = "hello";
	ArrayList<String> list4 = new ArrayList<String>(Collections.nCopies(count, element));
}
複製程式碼

增:

add(String e) :boolean
add(int index, String element) :void
addAll(Collection<? extends E> c) :boolean
addAll(int index, Collection<? extends E> c) :boolean
複製程式碼

刪&過濾:

remove(Object obj) :boolean
remove(int index) :String
removeAll(Collection<?> c) :boolean

removeIf(Predicate<? super E> filter) :boolean //過濾
list3.removeIf(o -> o.indexOf('3') > -1);
list3.removeIf(new Predicate<String>() {
	@Override
	public boolean test(String t) {
		return t.indexOf('4') > -1;
	}
});
複製程式碼

改:

E set(int index, E element)
複製程式碼

查:

int indexOf(Object o)
int lastIndexOf(Object o)
boolean contains(Object o)
複製程式碼
Vector

可以往其中隨意插入不同類的物件,即不需顧及型別也不需預先選定向量的容量,並可以方便地進行查詢。
api: www.runoob.com/java/java-v…

建立初始化:

不帶引數的建構函式初始化
Vector v;//初始化一個size為0的vector

帶引數的建構函式初始化
Vector v(10);//初始化size,但每個元素值為預設值
Vector v(10,"hello");//初始化了10個值為hello的元素

通過同型別的vector初始化
Vector v(10,"hello");
//通過v初始化
Vector v2(v);
複製程式碼

增:

boolean add(Object o);
void add(int index, Object element);
boolean addAll(Collection c);
boolean addAll(int index, Collection c);
void addElement(Object obj);
void insertElementAt(Object obj, int index);
複製程式碼

刪:

void clear();
複製程式碼

查:

boolean contains(Object elem);
複製程式碼
LinkedList

建立初始化:


複製程式碼
Queue
HashSet
TreeSet
LinkedHashSet
HashMap
TreeMap
HashTable

2.ArrayArrayList區別?

Array([]):最高效;但是其容量固定且無法動態改變;
ArrayList: 容量可動態增長;但犧牲效率;

物件陣列與基本型別陣列在運用上幾乎一模一樣,唯一差別在於,前者持有得是reference,後者直接持有基本型別之值; 例如:

String[] objArr = new String[100];
int[] basArr = new int[10];
複製程式碼

3.Arrays工具類

用於對陣列操作的工具類

1,二分查詢,陣列需要有序
binarySearch(int[])
binarySearch(double[])

2,陣列排序
sort(int[])
sort(char[])……
3,將陣列變成字串。
toString(int[])
4,複製陣列。
copyOf();
5,複製部分陣列。
copyOfRange():
6,比較兩個陣列是否相同。
equals(int[],int[]);
7,將陣列變成集合。
List asList(T[]);
複製程式碼

3.Collections工具類

1, 對list進行二分查詢:
前提該集合一定要有序。
int binarySearch(list,key);
//必須根據元素自然順序對列表進行升級排序
//要求list 集合中的元素都是Comparable 的子類。
int binarySearch(list,key,Comparator);

2,對list集合進行排序。
sort(list);
//對list進行排序,其實使用的事list容器中的物件的compareTo方法
sort(list,comaprator);
//按照指定比較器進行排序

3,對集合取最大值或者最小值。
max(Collection)
max(Collection,comparator)
min(Collection)
min(Collection,comparator)

4,對list集合進行反轉。
reverse(list);
5,可以將不同步的集合變成同步的集合。
Set synchronizedSet(Set<T> s)
Map synchronizedMap(Map<K,V> m)
List synchronizedList(List<T> list)
複製程式碼

4.迭代器 Iterator是什麼?

相關文章