Set Lưu các phần tử thuộc nhiều kiểu dữ liệu khác nhau nhưng phần tử không được lưu trữ theo chỉ số Không chứa các phần tử trùng nhau ( nếu mà trùng thì nó sẽ bị xóa) -Khác biệt List vs Set ( list có thể chứa các phần tử giống nhau còn set thì không) HashSet các phần tử thêm vào không được trùng nhau (thứ tự là ngẫu nhiên bị thay đổi) LinkedHashSet các phần tử thêm vào không được trùng nhau( thứ tự giống như với thứ tự được thêm vào) TreeSet các phần tử không được trùng nhau ( thứ tự thêm vào được sắp xếp theo thứ tự tăng dần)
public class SetInterface {
public static void main(String[] args) {
// TODO Auto-generated method stub
linkedHashSet();
hashSet();
treeSet();
}
private static void linkedHashSet() {
// TODO Auto-generated method stub
LinkedHashSet lk= new LinkedHashSet<>();
lk.add(8);
lk.add(12);
lk.add("java");
Iterator it= lk.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
private static void hashSet() {
// TODO Auto-generated method stub
HashSet lk= new HashSet<>();
lk.add(8);
lk.add(12);
lk.add("java");
Iterator it= lk.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
private static void treeSet() {
// TODO Auto-generated method stub
TreeSet lk= new TreeSet();
lk.add(8);
lk.add(12);
lk.add(55);
lk.add(23);
Iterator it= lk.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
sử dụng mảng động để lưu các phần tử nhiều kiểu dữ liệu khác nhau( giá trị có thể trùng nhau, thứ tự thêm cũng là thứ tự arraylist) duyệt thông qua for và iterator
public class List {
public static void main(String[] args) {
// TODO Auto-generated method stub
arrayList();
arrayListCallFunction();
}
// call function with object
public static void arrayListCallFunction(){
// lay danh sach Course , luu vao mang , xong add danh sach vao trong mang
ArrayList<Course> listCourse= new ArrayList<Course>();
Course course2= new Course();
course2.setName("Java");
listCourse.add(course2);
Course course1= new Course();
course1.setName("Android");
listCourse.add(course1);
Iterator iter= listCourse.iterator();
while(iter.hasNext()) {
Object obj= iter.next();
if(obj instanceof Course) { // kiem tra doi tuong obj co phai la kieu Course khong
Course cs =(Course)obj; // downCasting ( kieu lop con tham chieu den doi tuong lop cha)
System.out.println(cs.getNameCourse());
}
System.out.println("list course "+iter.next());
}
}
public static void arrayList() {
ArrayList listObj= new ArrayList();
Course course= new Course("Android", 250);
listObj.add("java ");
listObj.add(12);
listObj.add(12.4);
listObj.add(true);
listObj.add(course);
// System.out.println("tong size " + listObj.size()); // get the array length
// listObj.set(0, "Android + Java"); // set for the first element
// System.out.println(listObj.get(0)); // get first index
// System.out.println(listObj.get(listObj.size()-1)); //get last index
// get lists directly that lack safety
// print all element
for(int i = 0; i< listObj.size(); i ++) {
System.out.println(listObj.get(i));
}
//the way implement 2
// print all element with object
for(Object obj: listObj) {
System.out.println(obj);
}
// get list is safety but speed slow
// the way implement 3
Iterator iter= listObj.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
// remove implement
listObj.remove(0);
// remove all implement
listObj.clear();
// check list is empty
if(!listObj.isEmpty()) {
Iterator iter2= listObj.iterator();
while(iter2.hasNext()) {
System.out.println(iter2.next());
}
}else {
System.out.println("list is empty");
}
}
}
Class Course
public class Course {
private String nameCourse;
private int time;
public Course() {
}
public Course(String name, int time) {
super();
this.nameCourse = name;
this.time = time;
}
@Override
public String toString() {
return "Course [name=" + nameCourse + ", time=" + time + "]";
}
public String getNameCourse() {
return nameCourse;
}
public void setName(String name) {
this.nameCourse = name;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
}
1. Tính kế thừa cho phép một lớp chia sẻ các thuộc tính được định nghĩa trong một hoặc nhiều lớp khác
Lớp thừa hưởng
gọi là Subclass
Super Class là
lớp mà các thuộc tính của nó được lớp khác thừa hưởng
VD: xe là một
lớp : các đối tượng của nó là Xe dream, mô tô
Điều có thể
lái nên ta tạo lớp lái để cho các đối tượng xe có thể kế thừa
2 Tính đa hình cho phép một phương thức có các tác động khác nhau trên nhiều loại đối tượng khác nhau
Trong Java, chúng ta sử
dụng nạp chồng phương thức (method overloading) và ghi đè phương thức (method
overriding) để có tính đa hình.
VD:khi định nghĩa hai đối tượng
“hinh_vuong” và “hinh_tron” thì có một phương thức chung
là “chu_vi”. theo công thức khác với khi đối tượng là
“hinh_tron”.
Khi gọi phương thức này thì nếu đối tượng là
“hinh_vuong” nó sẽ tính theo công thức khác với khi đối tượng là
“hinh_tron”.
3 Sự trừu tượng hóa dữ liệu là tiến trình xác định và nhóm các thuộc tính và các hành động liên quan đến một thực thể đặc thù, xét trong mối tương quan với ứng dụng đang phát triển.
nói cách khác
mô phỏng tất cả các hành động và các thuộc tính của một thực thể. Vấn đề mấu
chốt là tập trung đến những hành vi cốt yếu và áp dụng chúng trong ứng dụng.
VD: như máy
sử dụng máy tính bạn không cần quan tâm tới chi tiết bên trong nó làm gì
chúng ta sử dụng nó như một thực thể ( trừu trượng là vậy nó làm đơn giản hóa
vấn đề đi )
4 Đóng gói là tiến trình che giấu việc thực thi những chi tiết của một đối tượng đối với người sử dụng đối tượng ấy.
Đặc trựng của
nó là lớp
Các đặc
trưng của lớp gồm có hai phần chính : thuộc tính (Attribute) và
hành vi (Behavior).
Hàm Dựng
Thiết lập là
một tiến trình hiện thực hóa một đối tượng.
Hàm thiết lập
là một phương thức đặc biệt phải được gọi trước khi sử dụng bất kỳ phương
thức nào trong một lớp. Hàm Thiết lập khởi tạo các thuộc tính, và cấp phát bộ
nhớ trong máy tính khi cần thiết.
Hàm Hủy
Hàm Hủy là một
phương thức đặc biệt được dùng để hủy bỏ một đối tượng.
Tiến trình
Hủy tiêu hủy một đối tượng và giải phóng khoảng trống bộ nhớ mà hàm thiết lập
đã cấp phát cho nó. Hàm Hủy cũng triệt tiêu khả năng truy cập đến đối tượng
ấy.
Các lớp xếp lồng vào nhau (nested classes)
Lớp kiểu tĩnh (static)
Lớp kiểu tĩnh
được định nghĩa với từ khoá static. Lớp tĩnh có thể truy nhập vào các thành
viên của lớp phủ nó thông qua một đối tượng. Do vậy lớp tĩnh thường ít được
sử dụng.
Lớp kiểu động (non static)
Lớp bên trong
(inner) thuộc loại quan trọng nhất của các lớp kiểu lồng. thể ngược lại
Đó là các lớp
nonstatic.Lớp bên trong có thể truy nhập tất cả các thành viên của lớp bao
nó, song không
Định nghĩa lớp bên trong chỉ có thể xác định
được trong phạm vi lớp ngoài cùng.
class Outer {
//Outer class constructor
class Inner
{
//Inner class
constructor
}
}
Cú pháp sau
đây cho phép truy nhập vào lớp bên trong Outer.Inner obj=new Outer().new
Inner();
Từ khoá super
Đôi khi bạn
không muốn thực hiện viết chồng một phương thức mà chỉ muốn thêm
chức năng vào phương thức.
Để làm
được điều này, bạn gọi phương thức được viết chồng dùng từ khoá
super. Từ khoá super dùng khi lớp con cần tham chiếu lớp cha trực
tiếp của nó.
Sử dụng từ khoá final cấm sự kế thừa
Muốn khai
báo một lớp mà không có lớp con kế thừa, bạn sử dụng từ khoá
final. Với một lớp final, thì tất cả các phương thức của nó sẽ là
final.
Ta không thể
khai báo một lớp vừa abstract và final vì một lớp trừu tượng là
một lớp chưa hoàn chỉnh và phải có lớp con để hiện thực đầy đủ