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ụ:
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ụ:
String[] a = { “Java”, “Example” };
Array.set(a, 1, “Programming”);
String iObject = Array.get(a, 1).toString();
System.out.println(“Length:” + Array.getLength(a) + ” objecAt1:” + iObject);

//In ra –> Length:2 objecAt1:Programming

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ụ:
ArrayList<String> a = new ArrayList();
a.add(“Java”);
a.add(0, “Example”);

for(String s : a) {
System.out.print(s + “\t”); //In ra Java Example
}

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ụ:
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ụ:
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ụ:
Map<Integer, String> map = new HashMap();
map.put(3, “Java”);
map.put(1, “Example”);
map.put(2, “HashMap”);
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=Java, 2=Example, 3=HashMap}
{1=Java, 2=Example, 3=HashMap}

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ụ:
Hashtable<Integer, String> map = new Hashtable<Integer, String>();
map.put(3, “Java”);
map.put(1, “Example”);
map.put(2, “Hashtable”);
System.out.println(map);
Kết quả in ra sẽ là: {3=Java, 2=Example, 1=Hashtable}

  • 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ụ:
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ụ:
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ụ:
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ụ:
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ụ:
import java.util.StringTokenizer;

public class StringTokenizerExample {

public static void main(String[] args) {

/*
* Có 2 cách để xác định một dấu phân cách cho đối tượng StringTokenizer.
* 1. Đồng thời tạo ra bằng cách qui định cụ thể trong hàm khởi dựng của StringTokenizer
* 2. Xác định nó trong phương thức nextToken()
*/

//1. Sử dụng hàm khởi dựng StringTokenizer
StringTokenizer st1 = new StringTokenizer(“Java|StringTokenizer|Example 1”, “|”);

//Lặp kiểm tra
while(st1.hasMoreTokens())
System.out.println(st1.nextToken());

//2. Sử dụng phương thức nextToken() . Thiết lập ký tự phân tách chuỗi để cho đối tượng StringTokenizer    dựa vào đó làm cơ sở cho tách chuỗi.
StringTokenizer st2 = new StringTokenizer(“Java|StringTokenizer|Example 2”);

while(st2.hasMoreTokens())
System.out.println(st2.nextToken(“|”));

}
}
Date (java.util.Date) là một lớp tiện ích xử lý về ngày tháng
Ví dụ:
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ụ:
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ụ:

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ụ:
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]

  • 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:
Pattern pat = Pattern.compile(“Nguyen.*Doan”);
Matcher matcher = pat.matcher(“Nguyen Doan”);
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

/*Check email format*/
String email = ” doanitsoft@gmail.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

Gửi phản hồi

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s