ตัวอย่างโค้ด
import java.util.*;
public class Demo {
static String second_repeated(Vector my_seq) {
HashMap my_map = new HashMap(my_seq.size()) {
@Override
public Integer get(Object key) {
return containsKey(key) ? super.get(key) : 0;
}
};
for (int i = 0; i < my_seq.size(); i++)
my_map.put(my_seq.get(i), my_map.get(my_seq.get(i)) + 1);
int first_val = Integer.MIN_VALUE;
int sec_val = Integer.MIN_VALUE;
Iterator> my_iter = my_map.entrySet().iterator();
while (my_iter.hasNext()) {
Map.Entry ent = my_iter.next();
int v = ent.getValue();
if (v > first_val) {
sec_val = first_val;
first_val = v;
} else if (v > sec_val && v != first_val)
sec_val = v;
}
my_iter = my_map.entrySet().iterator();
while (my_iter.hasNext()) {
Map.Entry ent = my_iter.next();
int v = ent.getValue();
if (v == sec_val)
return ent.getKey();
}
return null;
}
public static void main(String[] args) {
String arr[] = {"This", "sample", "only", "anything", "sample", "from", "sample", "only"};
List my_seq = Arrays.asList(arr);
System.out.println("The second most repeated word in the sequence is : ");
System.out.println(second_repeated(new Vector<>(my_seq)));
}
}
ผลลัพธ์
The second most repeated word in the sequence is : only
คลาส Demo มีฟังก์ชัน second_repeated สร้าง HashMap และ override เมธอด get เพื่อคืนค่า 0 หาก key ไม่มีอยู่ ใช้อิเทอเรเตอร์วนลูปนับความถี่ของแต่ละคำ หาค่าสูงสุด (first_val) และค่าสูงสุดอันดับสอง (sec_val) จากนั้นวนอิเทอเรเตอร์อีกรอบเพื่อหาคำที่มีความถี่เท่ากับ sec_val และคืนค่าคำนั้น ใน main สร้างอาร์เรย์ String แปลงเป็น List และเรียกฟังก์ชัน