Showing posts with label ArrayList. Show all posts
Showing posts with label ArrayList. Show all posts

Friday, December 18, 2015

[Java] Loại bỏ phần tử lặp trong ArrayList.

Trong bài viết này chúng ta sẽ học cách loại bỏ phần tử lặp có trong ArrayList. Các bước thực hiện như sau.
  1. Copy tất cả các phần tử của ArrayList cho LinkedHashSet.Tại sao lại là LinkedHashSet ? Bởi LinkedHashSet có thể loại bỏ các phần tử lặp và giữ cho việc chèn các phần tử theo thứ tự.
  2. Loại bỏ tất cả các phần tử của ArrayList.
  3. Copy tất cả các phần tử của LinkedHashSet cho ArrayList.
Chương trình cài đặt loại bỏ các phần tử lặp có trong ArrayList.
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
 
public class RemoveDuplicates {
 public static void main(String[]args){
  List<string> list = new ArrayList<string>();
  list.add("Hà Nội");
  list.add("Huế");
  list.add("Đà Nẵng");
  list.add("TP. Hồ Chí Minh");
  list.add("Hà Nội");
  System.out.println("Trước khi loại bỏ phần tử lặp:");
  for (String item : list) {
   System.out.println(item);
  }
  LinkedHashSet<string> linkedHashSet = new LinkedHashSet<string>();
  //copy các phần tử của list cho linkedHashset.
  linkedHashSet.addAll(list);
  //Loại bỏ tất cả các phần tử của ArrayList
  list.clear();
  //Copy tất cả các phần tử của LinkedHashSet cho ArrayList.
  list.addAll(linkedHashSet);
  System.out.println("Sau khi loại bỏ phần tử lặp:");
  for (String item : list) {
   System.out.println(item);
  }
 }
}
Output:
Trước khi loại bỏ phần tử lặp:
Hà Nội
Huế
Đà Nẵng
TP. Hồ Chí Minh
Hà Nội
Sau khi loại bỏ phần tử lặp:
Hà Nội
Huế
Đà Nẵng
TP. Hồ Chí Minh

Monday, November 30, 2015

[Java] Sắp xếp ArrayList trong Java

1. Sắp xếp mảng String ArrayList
Để sắp  xếp ArrayList có kiểu dữ liệu là String, ta dùng method Collections.sort(arraylist), dữ liệu được chứa trong ArrayList sẽ được sắp xếp theo thứ tự alphabetic.
Ví dụ.
package simplecodecjava.blogspot.com;

import java.util.ArrayList;
import java.util.Collections;

public class SortingInArrayList {
 public static void main(String[] args){
  ArrayList<String> arrayList = new ArrayList<>();
  arrayList.add("Hà Nội");
  arrayList.add("Đà Nẵng");
  arrayList.add("Nha Trang");
  arrayList.add("TP.Hồ Chí Minh");
  System.out.println("Trước khi sắp xếp");
  for(String item: arrayList){
   System.out.println(item);
  }
  Collections.sort(arrayList);
  System.out.println("Sau khi sắp xếp");
  for(String item: arrayList){
   System.out.println(item);
  }
 }
}
Kết quả output:
Trước khi sắp xếp
Hà Nội
Đà Nẵng
Nha Trang
TP.Hồ Chí Minh
Sau khi sắp xếp
Hà Nội
Nha Trang
TP.Hồ Chí Minh
Đà Nẵng
*note: Trong bảng mã Unicode ký tự Đ đứng sau ký tự T 
2. Sắp xếp mảng Interger ArrayList.
Tương tự như với mảng String, phương thức Collections.sort(arraylist) cũng được dùng để sắp xếp mảng Interger.
Ví dụ
package simplecodecjava.blogspot.com;

import java.util.ArrayList;
import java.util.Collections;

public class SortingInArrayList {
 public static void main(String[] args){
  ArrayList<Integer> arrayList = new ArrayList<>();
  arrayList.add(10);
  arrayList.add(2);
  arrayList.add(221);
  arrayList.add(991);
  System.out.println("Trước khi sắp xếp");
  for(Integer item: arrayList){
   System.out.println(item);
  }
  Collections.sort(arrayList);
  System.out.println("Sau khi sắp xếp");
  for(Integer item: arrayList){
   System.out.println(item);
  }
 }
}
Output:
Trước khi sắp xếp
10
2
221
991
Sau khi sắp xếp
2
10
221
991
3. Sắp xếp mảng Object ArrayList
Phương thức Collections.sort(arraylist) cũng được dùng để sắp xếp mảng đối tượng, tuy nhiên đối tượng cần phải là lớp thực thi của Comparable interaface hoặc viết lại phương thức compare của Comparator interface.
Trước tiên hãy xem ví dụ sau khi dùng Collections.sort(arraylist) mà chưa cài đặt bằng một trong hai cách trên.
package simplecodecjava.blogspot.com;

public class Student {
 private int MSV;
 private String ten;
 private int namsinh;
 private String khoa;
 public Student(int MSV, String ten, int namsinh, String khoa){
  this.MSV = MSV;
  this.ten = ten;
  this.namsinh = namsinh;
  this.khoa = khoa;
 }
 @Override
 public String toString() {
  return MSV + " - " + ten + " - " + namsinh + " - " + khoa;
 }
}
Main chương trình:
package simplecodecjava.blogspot.com;

import java.util.ArrayList;
import java.util.Collections;

public class SortingInArrayList {
 public static void main(String[] args){
  ArrayList<Student> arrayList = new ArrayList<Student>();
  arrayList.add(new Student(1, "Cảnh", 1991, "Công nghệ thông tin"));
  arrayList.add(new Student(5, "Tuấn", 1992, "Công nghệ thông tin"));
  arrayList.add(new Student(9, "Việt", 1994, "Điện tử viễn thông"));
  arrayList.add(new Student(1, "Tú Anh", 1993, "Công nghệ thông tin"));
  arrayList.add(new Student(1, "Liên", 1991, "Điện tử viễn thông"));
  arrayList.add(new Student(1, "Hiệp", 1990, "Điện tử viễn thông"));
  arrayList.add(new Student(1, "Quỳnh", 1992, "Công nghệ thông tin"));
  System.out.println("Trước khi sắp xếp");
  for(Student item: arrayList){
   System.out.println(item);
  }
  Collections.sort(arrayList);
  System.out.println("Sau khi sắp xếp");
  for(Student item: arrayList){
   System.out.println(item);
  }
 }
}
Với chương trình main trên, sẽ có thông báo lỗi ở dòng
Collections.sort(arrayList);
Với lỗi thông báo như sau:
Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments 
 (ArrayList). The inferred type Student is not a valid substitute for the bounded parameter >
Lỗi trên có thể được fix bằng một trong hai cách sau:
3.1 Cài đặt Class Student là lớp thực thi của Comparable interaface.
package simplecodecjava.blogspot.com;

public class Student implements Comparable<Student>{
 private int MSV;
 private String ten;
 private int namsinh;
 private String khoa;
 public Student(int MSV, String ten, int namsinh, String khoa){
  this.MSV = MSV;
  this.ten = ten;
  this.namsinh = namsinh;
  this.khoa = khoa;
 }
 @Override
 public String toString() {
  return MSV + " - " + ten + " - " + namsinh + " - " + khoa;
 }
 // sắp xếp sinh viên theo tên và theo khoa.
 @Override
 public int compareTo(Student o) {
  if(this.khoa.compareTo(o.khoa)== 0){
   return this.ten.compareTo(o.ten);
  }else{
   return this.khoa.compareTo(o.khoa);
  }
 }
}
Output: Sắp  xếp sinh viên theo khoa và theo tên theo thứ tự tăng dần.
Trước khi sắp xếp
1 - Cảnh - 1991 - Công nghệ thông tin
5 - Tuấn - 1992 - Công nghệ thông tin
9 - Việt - 1994 - Điện tử viễn thông
10 - Tú Anh - 1993 - Công nghệ thông tin
22 - Liên - 1991 - Điện tử viễn thông
17 - Hiệp - 1990 - Điện tử viễn thông
23 - Quỳnh - 1992 - Công nghệ thông tin
Sau khi sắp xếp
1 - Cảnh - 1991 - Công nghệ thông tin
23 - Quỳnh - 1992 - Công nghệ thông tin
5 - Tuấn - 1992 - Công nghệ thông tin
10 - Tú Anh - 1993 - Công nghệ thông tin
17 - Hiệp - 1990 - Điện tử viễn thông
22 - Liên - 1991 - Điện tử viễn thông
9 - Việt - 1994 - Điện tử viễn thông
3.2 Viết lại phương thức compare của Comparator interface.
Với cách này chúng ta không cần cài đặt Student là lớp thực thi từ Comparator interface như ở 3.1, thay vào đó phương thức compare của Comparator interace được viết lại như sau:
package simplecodecjava.blogspot.com;
import java.util.Comparator;
public class Student{
 private int MSV;
 private String ten;
 private int namsinh;
 private String khoa;
 public Student(int MSV, String ten, int namsinh, String khoa){
  this.MSV = MSV;
  this.ten = ten;
  this.namsinh = namsinh;
  this.khoa = khoa;
 }
 @Override
 public String toString() {
  return MSV + " - " + ten + " - " + namsinh + " - " + khoa;
 }
 public static Comparator<Student> compare = new Comparator<Student>() {

  @Override
  public int compare(Student o1, Student o2) {
   if(o1.khoa.compareTo(o2.khoa)== 0){
    return o1.ten.compareTo(o2.ten);
   }else{
    return o1.khoa.compareTo(o2.khoa);
   }
  }
 };
 }
Main chương trình:
package simplecodecjava.blogspot.com;

import java.util.ArrayList;
import java.util.Collections;

public class SortingInArrayList {
 public static void main(String[] args){
  ArrayList<Student> arrayList = new ArrayList<Student>();
  arrayList.add(new Student(1, "Cảnh", 1991, "Công nghệ thông tin"));
  arrayList.add(new Student(5, "Tuấn", 1992, "Công nghệ thông tin"));
  arrayList.add(new Student(9, "Việt", 1994, "Điện tử viễn thông"));
  arrayList.add(new Student(10, "Tú Anh", 1993, "Công nghệ thông tin"));
  arrayList.add(new Student(22, "Liên", 1991, "Điện tử viễn thông"));
  arrayList.add(new Student(17, "Hiệp", 1990, "Điện tử viễn thông"));
  arrayList.add(new Student(23, "Quỳnh", 1992, "Công nghệ thông tin"));
  System.out.println("Trước khi sắp xếp");
  for(Student item: arrayList){
   System.out.println(item);
  }
  Collections.sort(arrayList, Student.compare);
  System.out.println("Sau khi sắp xếp");
  for(Student item: arrayList){
   System.out.println(item);
  }
 }
}
Output:
Trước khi sắp xếp
1 - Cảnh - 1991 - Công nghệ thông tin
5 - Tuấn - 1992 - Công nghệ thông tin
9 - Việt - 1994 - Điện tử viễn thông
10 - Tú Anh - 1993 - Công nghệ thông tin
22 - Liên - 1991 - Điện tử viễn thông
17 - Hiệp - 1990 - Điện tử viễn thông
23 - Quỳnh - 1992 - Công nghệ thông tin
Sau khi sắp xếp
1 - Cảnh - 1991 - Công nghệ thông tin
23 - Quỳnh - 1992 - Công nghệ thông tin
5 - Tuấn - 1992 - Công nghệ thông tin
10 - Tú Anh - 1993 - Công nghệ thông tin
17 - Hiệp - 1990 - Điện tử viễn thông
22 - Liên - 1991 - Điện tử viễn thông
9 - Việt - 1994 - Điện tử viễn thông

Thursday, November 12, 2015

[Java] ArrayList trong Java

ArrayList là một Class implement (thực thi) của List Interface, được sử dụng phổ biến bởi khả năng linh động của nó. Hầu hết tất cả các developer chọn ArrayList thay vì Array truyền thống như trong C/C++.
Vấn đề với Array đó là kích thước cố định của nó, nếu Array được khai báo có kích thước n phần tử thì khi Array đã chứa đầy n phần tử thì ta không thể chèn thêm bất kỳ phần tử nào nữa. Còn ArrayList thì khác ta có thể chèm thêm tùy ý mà không cần lo lắng là ArrayList sẽ bị đầy, chính vì đặc tính này mà giúp cho ArrayList phổ biến hơn Array.
Ví dụ về ArrayList.
import java.util.ArrayList;
public class ArrayListExample {
 public static void main(String args[]) {
       /*
        *Tạo ArrayList: Thêm String
        *Dữ liệu được thêm vào có kiểu dữ liệu là String
        **/
    ArrayList<String> obj = new ArrayList<String>();
    /*This is how elements should be added to the array list*/
    obj.add("Hà Nội");
    obj.add("Đà Nẵng");
    obj.add("TP Hồ Chí Minh");
    obj.add("Hoàng Sa");
    obj.add("Trường Sa");
    System.out.println("ArrayList chứa những String sau.:"+obj);
    /*Thêm String mới vào các vị trí*/
    obj.add(0, "Nha Trang");
    obj.add(1, "Đà Lạt");
    /*Loại bỏ String khỏi ArrayList*/
    obj.remove("Đà Nẵng");
    obj.remove("TP Hồ Chí Minh");
    System.out.println("ArrayList mới nhận được:"+obj);
    /*Loại bỏ String ở vị trí 1*/
    obj.remove(1);
    System.out.println("ArrayList mới nhận được:"+obj);
    }
}
Kết quả chương trình:
ArrayList chứa những String sau.:[Hà Nội, Đà Nẵng, TP Hồ Chí Minh, Hoàng Sa, Trường Sa]
ArrayList mới nhận được:[Nha Trang, Đà Lạt, Hà Nội, Hoàng Sa, Trường Sa]
ArrayList mới nhận được:[Nha Trang, Hà Nội, Hoàng Sa, Trường Sa]
Các Method của ArrayList class.
1. add(Object o): Thêm một đối tượng vào trong ArrayList.
obj.add("Hello");
Thêm String "Hello" vào cuối ArrayList
2. add(int index, Object o): Thêm một đối tượng vào trong ArrayList ở vị trí index.
obj.add(2,"Hello");
Thêm String "Hello" vào vị trí thứ 2 của ArrayList.
3. boolean remove(Object o): Loại bỏ đối tượng o ra khỏi ArrayList.
obj.remove("Hello");
Loại bỏ String "Hello" trong ArrayList. Nếu  có String "Hello" phương thức sẽ trả về TRUE, nếu không có phương thức sẽ trả về FALSE.
4. E remove(int index): Loại bỏ đối tượng ở vị trí index.
obj.remove(1);
Loại bỏ đối  tượng ở vị trí index = 1 trong ArrayList. Kết quả trả về đối tượng ở vị trí số 1.
5. E set(int index, Object o): Được dùng để update một đối tượng, sẽ thay thế đối tượng ở vị trí index bằng đối tượng o. Phương thức trả về đối tượng ở vị trí index trước khi bị thay thế bởi đối tượng o.
obj.set(1,"Hello");
Thay thế String ở vị trí 1 bằng String "Hello", phương thức trả về String ở vị trí 1 trước khi bị thay thế bởi String "Hello".
6. int indexOf(Object o): Đưa ra vị trí của đối tượng o trong ArrayList. Nếu đối tượng không tìm thấy trong ArrayList method sẽ trả về -1.
obj.indexOf("Hello");
Trả về vị trí của String "Hello" có trong ArrayList. Nếu không có String "Hello" trong ArrayList, phương thức sẽ trả về -1.
7. Object get(int index): Trả về đối tượng của ArrayList ở vị trí index.
obj.get(1);
Trả về đối tượng ở vị trí 1.
8. int size(): Trả về số đối tượng có trong ArrayList.
obj.size();
9. boolean contains(Object o): Thực hiện kiểm tra đối tượng o có trong ArrayList hay không. Nếu có phương thức sẽ trả về TRUE, nếu không có phương thức sẽ trả về FALSE.
obj.contains("Hello");
Nếu ArayList có chứa String "Hello" phương thức sẽ trả về TRUE, nếu không chứa sẽ trả về FALSE.
10. clear(): Loại bỏ tất cả các đối tượng có trong ArrayList.
obj.clear();
Nếu bạn có câu hỏi hay góp ý xin hãy để lại ý kiến trong phần comment của bài viết.