Thứ Bảy, 16 tháng 3, 2013

Một số lớp căn bản trong Java

Basic classes trong java

1.1 Các lớp Wrapper (Integer, Double, Float, …) và Array

Byte, Integer, Float, Double, … là những lớp xử lý về byte, số nguyên, số thực, nó chứa những phương tích tiện ích giúp xử lý số nguyên, số thực như compareTo, doubleValue, floatValue, longValue, notify, toString,…

Ví dụ:


PHP Code:

Integer i = new Integer(1);
Double d1 = new Double(1.0002);
Double d2 = i.doubleValue();

if(d1.compareTo(d2) == 0) {
System.out.println(d1 + " equal " + d2);
} else {
System.out.println(d1 + " not equal " + d2);
}


Kết quả sẽ in ra màn hình: 1.0 not equal 1.0002

Array (java.lang.reflect.Array) là lớp chứa các phương thức static giúp tạo và quản lý mảng dễ dàng hơn. Một số phương thức trong lớp Array như:

  • get: lấy một đối tượng từ mảng

  • getLength: trả về kích thước mảng

  • getInt: lấy về một số nguyên trong mảng các số nguyên

  • getBoolean: lấy về giá trị boolean trong mảng các giá trị boolean

  • set: đưa một đối tượng vào mảng

  • setInt: đưa một số nguyên vào mảng



Ví dụ:

PHP Code:

String[] a = { "Nguyen", "Kien" };
Array.set(a, 1, "Anh");
String iObject = Array.get(a, 1).toString();
System.out.println("Length:" + Array.getLength(a) + " objecAt1:" + iObject); //In ra Length:2 objecAt1:Anh

boolean[] b = { true, false, true };
boolean bObject = Array.getBoolean(b, 2);
System.out.println(bObject); //In ra true


1.2 Các lớp Collection (Collection, Set, List, Map, ArrayList, Vector, Hashtable, Hashset, HashMap)

Các lớp về collection được đặt trong gói java.util. Đây là mối quan hệ giữa các lớp collection



 

Java Collection Implementations Historical
Hash table Resizable Array Balanced Tree LinkedList
Interfaces Collection HashSet ArrayList TreeSet LinkedList
Set HashSet TreeSet
SortedSet TreeSet
List ArrayList LinkedList Vector, Stack
Map HashMap TreeMap HashTable, Properties
SortedMap TreeMap



Chúng ta sẽ đi vào chi tiết từng lớp

Collection là một interface với các phương thức phổ biến nhất để gom nhóm các đối tượng như:

  • add: thêm phần tử vào mảng

  • isEmpty: kiểm tra mảng có rỗng không

  • remove: xóa phần tử khỏi mảng

  • size: lấy kích thước mảng

  • clear: xóa tẩt cả các phần tử trong mảng

  • toArray: trả về mảng các đối tượng



List là một interface dùng chứa danh sách liên tục, nó kế thừa từ Collection interface nên nó có các hàm trong Collection và một số hàm riêng của nó như:

  • get: lấy phần tử ra khỏi mảng

  • indexOf: tìm phần tử trong mảng

  • set: thay thế phần tử trong mảng



ArrayList là một lớp kế thừa từ AbstractList và implement List interface và một vài interface khác.

Ví dụ:

PHP Code:

ArrayList<String> a = new ArrayList();
a.add("Kien");
a.add(0, "Anh");

for(String s : a) {
System.out.print(s + "\t"); //In ra Anh Kien
}


Set, SortedSet, HashSet, TreeSet cũng là những lớp xử lý liên quan đến collection tuy nhiên chúng khác bên nhóm List là các phần tử trong Set là duy nhất.

Ví dụ:

PHP Code:

Set set = new HashSet();
set.add("Bernadine");
set.add("Elizabeth");
set.add("Gene");
set.add("Elizabeth");
set.add("Clara");
System.out.println(set);


Chúng ta sẽ nhận được chuỗi in ra là: [Bernadine, Gene, Elizabeth, Clara]

Set, SortedSet là interface còn HashSet và TreeSet là những lớp implement interface Set và kế thừa từ AbstractSet. TreeSet là collection được sắp xếp tức là các phần tử khi đưa vào TreeSet sẽ tự động được đưa đúng vị trí theo thứ tự sắp xếp, còn HashSet thì không.

Ví dụ:

PHP Code:

Set set = new TreeSet();
set.add("Bernadine");
set.add("Elizabeth");
set.add("Gene");
set.add("Elizabeth");
set.add("Clara");
System.out.println(set);


Ta sẽ nhận được kết quả: [Bernadine, Clara, Elizabeth, Gene]

Map, SortedMap, HashMap, TreeMap là những lớp dùng để xử lý collection theo dạng key-value.

Map, SortedMap là interface và nó không kế thừa từ Collection interface như những interface ở trên. Còn HashMap và TreeMap là hai lớp implement Map interface và kế thừa từ AbstractMap

Ví dụ:

PHP Code:

Map<Integer, String> map = new HashMap();
map.put(3, "Kien");
map.put(1, "Nguyen");
map.put(2, "Anh");
System.out.println(map);

Map sortedMap = new TreeMap(map);
System.out.println(sortedMap);
Kết quả in ra màn hình sẽ là: {1=Nguyen, 2=Anh, 3=Kien}
{1=Nguyen, 2=Anh, 3=Kien}


Chúng ta có một vài lớp ra đời trước như như Vector, HashTable

Vector là một lớp tương tự ArrayList về mặt xử lý tuy nhiên chúng có sự khác biệt là Vector thì là đồng bộ (Synchronized) và được dùng nhiều trong ứng dụng đa luồng (multithreading). Chính vì đồng bộ nên sử dụng vector sẽ cho tốc độ chậm hơn một chút so với dùng ArrayList.

HashTable là lớp tương tự HashMap về mặt ý nghĩa, và HashTable cũng là đồng bộ và được dùng nhiều trong ứng dụng đa luồng. Còn HashMap thì không đồng bộ, tuy nhiên chúng ta có thể thêm chức năng đồng bộ cho HashMap nhưng mặc định thì HashMap không có. HashMap ra đời sau nên nó có vẻ hiện đại và được sử dụng nhiều hơn Hashtable

Ví dụ:

PHP Code:

Hashtable<Integer, String> map = new Hashtable<Integer, String>();
map.put(3, "Kien");
map.put(1, "Nguyen");
map.put(2, "Anh");
System.out.println(map);


Kết quả in ra sẽ là: {3=Kien, 2=Anh, 1=Nguyen}

1.3 Nhóm lớp về String (String, StringBuffer, StringBuilder)

String là một đối tượng trong java dùng để xử lý chuỗi ký tự. Giá trị của đối tượng một khi khởi tạo thì không thể thay đổi. 

Ví dụ:

PHP Code:

String str = "Luvina";
str += "Company";
System.out.println(str);


Trong ví dụ trên chuỗi LuvinaCompany được in ra màn hình, tuy nhiên đối tượng str không thay đổi mà là có một đối tượng khác được tạo ra có giá trị là chuỗi LuvinaCompany rồi sau đó gán vào đối tượng str.

Một số phương thức thông dụng trong lớp String như:

  • length: lấy chiều dài hiện tại của chuỗi

  • substring: lấy ra một chuỗi trong chuỗi hiện hành

  • compareTo: so sánh 2 chuỗi có xét ký tự hoa, thường

  • compareToIgnoreCase: so sánh 2 chuỗi bỏ qua ký tự hoa thường


Ví dụ:

PHP Code:

String str = "Luvina";
System.out.println("Length: " + str.length() + " substring(1,2): " + str.substring(1, 2));


Ta nhận được kết quả trên màn hình như sau: Length: 6 substring(1,2): u
StringBuffer và StringBuilder cũng là đối tượng trong java để xử lý chuỗi nhưng chúng khác String ở chỗ là giá trị tạo ra của chúng có thể thay đổi được mà không cần phải tạo một đối tượng mới trong bộ nhớ. Thực ra khi chúng ta xử lý việc thay đổi giá trị trên String thì bên dưới trình JVM sẽ dùng các đối tượng StringBuffer và StringBuilder để xử lý và tạo ra các đối tượng String mới.

Ví dụ:

PHP Code:

StringBuffer str = new StringBuffer("Luvina");
str.append("Company");
System.out.println(str); //In ra LuvinaCompany


Từ đặc điểm trên ta có thể thấy khi xử lý chuỗi mà giá trị sẽ hay thay đổi (cộng chuỗi, cắt chuỗi, …) thì nên dùng StringBuffer hoặc StringBuilder sẽ cho tốc độ nhanh hơn so với sử dụng String.

Một số phương thức thông dụng trong StringBuffer và StringBuilder:

  • append: thêm một chuỗi vào cuối chuỗi đang có

  • insert: chèn một chuỗi vào chuỗi đang có

  • replace: thay thế một chuỗi

  • delete: xóa một chuỗi trong chuỗi hiện hành

  • lastIndexOf: tìm một chuỗi

  • reverse: đảo ngược một chuỗi


Ví dụ:

PHP Code:

StringBuffer str = new StringBuffer("Luvina");
System.out.println("Length: " + str.length()
+ " substring(1,2): " + str.substring(1, 2)
+ " str.append(\" Company\"): " + str.append(" Company")
+ " str.lastIndexOf(\"n\"): " + str.lastIndexOf("n")
+ " str.reverse: " + str.reverse());


Ta thu được kết quả trên màn hình từ đoạn code trên như sau:
Length: 6 substring(1,2): u str.append(" Company"): Luvina Company str.lastIndexOf("n"): 12 str.reverse: ynapmoC anivuL

1.4 Các lớp tiện ích khác (StringTokenizer, Date, Calendar, SimpleDateFormat, Arrays)

StringTokenizer (java.util.StringTokenizer) là một lớp tiện ích giúp tách các chuỗi (string) được ngăn cách bởi các ký tự

Ví dụ:

PHP Code:

String s = "subject:Demo StringTokenizer";

StringTokenizer st = new StringTokenizer(s, ":");
while(st.hasMoreTokens()) {
String key = st.nextToken();
String val = st.nextToken();
System.out.println(key + ":" + val);//In subject:Demo StringTokenizer
}


Date (java.util.Date) là một lớp tiện ích xử lý về ngày tháng

Ví dụ:

PHP Code:

Date dObject = new Date(2009, 12, 22);

System.out.println(dObject.toString()); //In Sat Jan 22 00:00:00 ICT 3910
System.out.println(dObject.getDate()); //In 22


Calendar là một lớp trừu tượng giúp hỗ trợ trong việc biến đổi thông tin ngày tháng.

Ví dụ:

PHP Code:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 0);
Date dObject = cal.getTime();

System.out.println(dObject.toString()); //In Tue Dec 22 17:28:46 ICT 2009


SimpleDateFormat (java.text. SimpleDateFormat) là một lớp tiện ích giúp cho việc định dạng và trích thông tin thời gian.

Ví dụ:

PHP Code:

Date date = new Date();
SimpleDateFormat sdf;

sdf = new SimpleDateFormat("hh:mm:ss");
System.out.println(sdf.format(date)); //In 05:35:38

sdf = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz");
System.out.println(sdf.format(date)); //In 22 Dec 2009 05:35:38 ICT


Arrays (java.util.Arrays) là lớp chứa các phương thức static giúp cho việc thay đổi mảng (sắp xếp, tìm kiếm, thay thế) dễ dàng hơn. Nó là bổ sung cho lớp Array. Một số phương thức trong lớp Arrays như:

  • binarySearch: tìm kiếm phần tử trong mảng dùng thuật toán tìm kiếm nhị phân

  • copyOf: sao chép một mảng với chiều dài

  • copyOfRange: sao chép một mảng với một vùng từ vị trí đầu đến vị trí cuối

  • equals: so sánh 2 mảng

  • sort: sắp xếp mảng



Ví dụ:

PHP Code:

[PHP]String[] a = { "Nguyen", "Anh", "Kien" };
String[] b = Arrays.copyOf(a, 2);
int indexOfAnh = Arrays.binarySearch(a, "Anh");

/*sort a array*/
Arrays.sort(a);

System.out.println(indexOfAnh); //In ra 1 because find Anh before sorting a array
System.out.println(Arrays.toString(a)); //In ra [Anh, Kien, Nguyen]
System.out.println(Arrays.toString(b)); //In ra [Nguyen, Anh]


[/PHP]

1.5 RegularExpression

Regular Expression hay còn gọi là biểu thức chính quy dùng để chỉ cách thức chúng ta nhận biết, kiểm tra một chuỗi (biểu thức) có đúng như định dạng chúng ta mong muốn hay không.

Trong java hiện nay có 2 lớp là Pattern và Matcher (java.util.regex) giúp ta xử lý các vấn đến liên quan đến regular expression.

Pattern là lớp dùng để biên dịch biểu thức, kết quả biên dịch để tạo ra đối tượng thuộc lớp Matcher để kiểm tra chuổi ký tự có đúng biểu thức đó.

Một vài phương thức của lớp Pattern như:

  • compile: biên dịch biểu thức trong pattern

  • matcher: tạo ra đối tượng thuộc lớp Matcher từ pattern

  • matches: kiểm tra chuỗi có đúng với biểu thức trong pattern



Matcher là lớp được tạo ra từ Pattern và dùng để thực hiện những việc như match, tìm kiếm.

Một vài phương thức trong lớp Matcher như:

  • find: tìm kiếm chuỗi mà match với mẫu biểu thức

  • matches: kiểm tra chuỗi có match với mẫu biểu thức



Một vài pattern đơn giản:

  • ^ phủ định

  • $ kết thúc một pattern

  • [abc] ký tự a, b và c

  • [^abc] bất kỳ ký tự nào trừ a, b, c

  • [a-z0-9] các ký tự a đến z và 0 đến 9


Ví dụ kiểm tra một chuỗi với các ký tự bắt buộc:

PHP Code:

Pattern pat = Pattern.compile("Nguyen.*Kien");
Matcher matcher = pat.matcher("Nguyen Anh Kien");
boolean flag = matcher.matches();
System.out.println(flag); //In ra true
Ví dụ bạn cần kiểm tra điện thoại đúng định dạng XXX-XXXX-XXXX, mỗi khối X có ít nhất 1 ký tự và tối đa 3-4-4 ký tự:
String phone = "59-1111-1112";
String phoneNumberPattern = "^[0-9]{1,3}-[0-9]{1,4}-[0-9]{1,4}$";
boolean isMatch = Pattern.matches(phoneNumberPattern, phone);
System.out.println(isMatch); //In ra true


Ví dụ về kiểm tra địa chỉ email

PHP Code:

/*Check email format*/
String email = "nakien2a@yahoo.com";
String emailPattern = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-z]{2,7}$";

boolean isMatch = Pattern.matches(emailPattern, email);
System.out.println(isMatch); //In ra true 

0 nhận xét:

Đăng nhận xét