Skip to content

Commit

Permalink
BSTMap and linkedListMap compare.
Browse files Browse the repository at this point in the history
  • Loading branch information
liusishan committed Feb 21, 2019
1 parent aadfd8e commit 7602770
Show file tree
Hide file tree
Showing 2 changed files with 182 additions and 0 deletions.
141 changes: 141 additions & 0 deletions 07-Set-and-Map/04-BSTMap/src/LinkedListMap.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
import java.util.ArrayList;

/**
* @Auther: lss
* @Date: 2019/2/21 15:37
* @Description:
*/
public class LinkedListMap<K, V> implements Map<K, V> {

private class Node {
public K key;
public V value;
public Node next;

public Node(K key, V value, Node next) {
this.key = key;
this.value = value;
this.next = next;
}

public Node(K key) {
this(key, null, null);
}

public Node() {
this(null, null, null);
}

@Override
public String toString() {
return key.toString() + ":" + value.toString();
}
}

private Node dummyHead;
private int size;

public LinkedListMap() {
dummyHead = new Node();
size = 0;
}


@Override
public void add(K key, V value) {
// 确认当前映射有没有要添加的key
Node node = getNode(key);
if (node == null) {
dummyHead.next = new Node(key, value, dummyHead.next);
size++;
} else {
node.value = value;
}
}

@Override
public V remove(K key) {

Node prev = dummyHead;
while (prev.next != null) {
if (prev.next.key.equals(key))
break;
prev = prev.next;
}

if (prev.next != null) {
Node delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
size--;
return delNode.value;
}

return null;
}

@Override
public boolean contains(K key) {
return getNode(key) != null;
}

@Override
public V get(K key) {
Node node = getNode(key);
return node == null ? null : node.value;
}

@Override
public void set(K key, V newValue) {

Node node = getNode(key);
if (node == null)
throw new IllegalArgumentException(key + "doesn't exits!");

node.value = newValue;
}

private Node getNode(K key) {

Node cur = dummyHead.next;
while (cur != null) {
if (cur.key.equals(key))
return cur;
cur = cur.next;
}
return null;
}

@Override
public int getSize() {
return size;
}

@Override
public boolean isEmpty() {
return size == 0;
}

public static void main(String[] args) {

System.out.println("Pride and Prejudice");

ArrayList<String> words = new ArrayList<>();
if (FileOperation.readFile("pride-and-prejudice.txt", words)) {
System.out.println("Total words: " + words.size());

LinkedListMap<String, Integer> map = new LinkedListMap<>();
for (String word : words) {
if (map.contains(word))
map.set(word, map.get(word) + 1);
else
map.add(word, 1);
}

System.out.println("Total different words: " + map.getSize());
System.out.println("Frequency of PRIDE: " + map.get("pride"));
System.out.println("Frequency of PREJUDICE: " + map.get("prejudice"));
}
}

}
41 changes: 41 additions & 0 deletions 07-Set-and-Map/04-BSTMap/src/Main.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,52 @@
import java.util.ArrayList;

/**
* @Auther: lss
* @Date: 2019/1/31 21:50
* @Description:
*/
public class Main {

private static double testMap(Map<String, Integer> map, String filename) {

long startTime = System.nanoTime();

System.out.println(filename);
ArrayList<String> words = new ArrayList<>();
if (FileOperation.readFile(filename, words)) {
System.out.println("Total words: " + words.size());

for (String word : words) {
if (map.contains(word))
map.set(word, map.get(word) + 1);
else
map.add(word, 1);
}

System.out.println("Total different words: " + map.getSize());
System.out.println("Frequency of PRIDE: " + map.get("pride"));
System.out.println("Frequency of PREJUDICE: " + map.get("prejudice"));
}

long endTime = System.nanoTime();

return (endTime - startTime) / 1000000000.0;
}

public static void main(String[] args) {

String filename = "pride-and-prejudice.txt";

BSTMap<String, Integer> bstMap = new BSTMap<>();
double time1 = testMap(bstMap, filename);
System.out.println("BST Map" + time1 + "s");

System.out.println();

LinkedListMap<String, Integer> linkedListMap = new LinkedListMap<>();
double time2 = testMap(linkedListMap, filename);
System.out.println(time2);
System.out.println("linkedListMap" + time2 + "s");

}
}

0 comments on commit 7602770

Please sign in to comment.