các trọng lượng đó trong các nhóm cách nhau 5 đơn vị (kg).
import java.util.*;
public class NhomTrongluong {
public static void main(String args[]){
// Tạo ra một ánh xạ để lưu tần suất của mỗi nhóm Map demNhom = new HashMap();
int nArgs = args.length;
// Đọc các trọng lượng được nhập vào từ đối số và chia nhóm cách nhau 5 đơn vị.
for(int i = 0; i < nArgs; i++){
double trongL = Double.parseDouble(args[i]);
Integer nhomTL=new Integer((int)Math.round(trongL/5)*5); Integer demCu = (Integer)demNhom.get(nhomTL);
// Tăng số lần trọng luợng trong cùng nhóm, nếu là lần đâu (demCu = null) thì đặt là 1.
Integer demMoi = (demCu == null)?
new Integer(1): new Integer(demCu.intValue()+1); demNhom.put(nhomTL, demMoi);
// Lấy ra tập các giá trị từ ánh xạ demNhom List keys = new ArrayList(demNhom.keySet()); // Sắp xếp lại theo các nhóm trọng lượng
Collections.sort(keys);
ListIterator keyIterator = keys.listIterator();
// Tìm tần suất của các trọng lượng được nhập vào trong các nhóm while(keyIterator.hasNext()) {
Integer nhom = (Integer) keyIterator.next(); Integer dem = (Integer) demNhom.get(nhom); int demInt = dem.intValue();
// Sử dụng hàm fill() của lớp Array để tạo ra xâu gồm demInt các dấu ‘*’
char[] bar = new char[demInt]; Arrays.fill(bar, '*');
System.out.println(nhom+"\t" + new String(bar)); }
} }
Dịch và chạy chương trình NhomTrongLuong với các tham số: java NhomTrongLuong 75 72 93 12 34 sẽ cho kết quả: 10 * 35 * 36 ** 95 * Như vậy, nhóm 10 kg có 1, 35 kg có 1, 75 kg có 2 và 95 kg có 1. 4. SortedSet (tập được sắp) và SortedMap (ánh xạ được sắp)
Các cấu trúc tập hợp (set) và ánh xạ (map) có giao diện đặc biệt là SortedSet và SortedMap như trong hình H6-5 để cài đặt những cấu trúc có các phần tử được sắp
theo thứ tự chỉ định. Giao diện SortedSet
SortedSet là giao diện mở rộng của Set cung cấp các hàm để xử lý các tập được sắp.
SortedSet headSet(Object toElem);
Cho lại tập được sắp gồm những phần tử đứng trước toElem.
SortedSet tailSet(Object fromElem);
Cho lại tập được sắp gồm những phần tử cuối đứng sau fromElem.
SortedSet subSet(Object fromElem, Object toElem);
Cho lại tập được sắp gồm những phần tử kể từ fromElem đến toElem.
Object first();Cho lại phần tử đầu tiên (cực tiểu) của tập được sắp. Object last();Cho lại phần tử cuối cùng (cực đại) của tập được sắp. Comparator comparator()
Cho lại thứ tự so sánh của cấu trúc được sắp, cho null nếu các phần tử được sắp theo thứ tự tự nhiên (tăng dần)
Giao diện SortedMap
SortedMap là giao diện mở rộng của Map cung cấp các hàm để xử lý các ánh xạ được sắp theo thứ tự của khoá (key).
SortedMap headMap(Object toKey);Cho lại ánh xạ được sắp gồm những phần tử đứng trước toKey.
SortedMap tailMap(Object fromKey);Cho lại ánh xạ được sắp gồm những phần tử cuối đứng sau fromKey.
SortedMap subMap(Object fromKey, Object toKey);Cho lại ánh xạ được sắp gồm những phần tử kể từ fromKey đến toKey.
Object firstKey();Cho lại phần tử đầu tiên (cực tiểu) của ánh xạ được sắp. Object lastKey();Cho lại phần tử cuối cùng (cực đại) của ánh xạ được sắp.
TreeSet và TreeMap
Hai lớp này cài đặt hai giao diện SortedSet và SortedMap tương ứng. Chúng có bốn loại toán tử tạo lập như sau:
TreeSet()
TreeMap()
Tạo ra những tập hoặc ánh xạ mới và rỗng, được sắp theo thứ tự tăng dần
của các phần tử hoặc của khoá.
TreeSet(Comparator c) TreeMap(Comparator c)
Tạo ra những tập hoặc ánh xạ mới được sắp và xác định thứ tự so sánh theo c.
TreeSet(Collection c) TreeMap(Map m)
Tạo ra những tập hoặc ánh xạ mới được sắp và có các phần tử lấy từ c hoặc từ m tương ứng.
TreeSet(SortedSet s)
TreeMap(SortedMap m)
Tạo ra những tập hoặc ánh xạ mới được sắp và có các phần tử lấy từ s hoặc từ m tương ứng.