javakey
『壹』 怎樣將一個String轉化為Key類型(java.security.Key)。
java.security.Key
是介面,得通過該介面的相應的實現類取得相應的實例
『貳』 Java怎樣創建兩個KEY的MAP
就像在XY坐標系中,一個X刻度、一個Y刻度,會對應圖上的一個點,即pair(x, y) – > point,那麼就有創建一個點,或者根據(x, y)來尋求一個點的需求,如果用Python的語法表達,是這個樣子:
Python中表達pair KEY映射MAP的方法
Python
dict((x, y) : point)
dict ( ( x , y ) : point )
然而在JAVA中卻變得不容易,骨鉤了一下,有這么一些方法:
使用嵌套MAP
嵌套MAP實現雙KEY MAP
Java
Map<Integer, Map<Integer, V>> map = //...
// ...
map.get(2).get(5);
Map < Integer , Map < Integer , V >> map = //...
// ...
map . get ( 2 ) . get ( 5 ) ;
這種方法將水平的KEY切換成了垂直KEY,我們要找尋XY坐標系中(x, y)對應的點,其實可以先找x點的那條垂直線,然後找出這條垂直線上y高度的那個點。
但是要取得這個雙KEY的VALUE,得有2次GET,實例代碼沒有做第一次GET的NULL判斷,有隱患!並且感覺不是很直觀。
寫一個pair key的包裝類
pair key的包裝類
Java
public class Key {
private final int x;
private final int y;
public Key(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Key)) return false;
Key key = (Key) o;
return x == key.x && y == key.y;
}
@Override
public int hashCode() {
int result = x;
result = 31 * result + y;
return result;
}
}
public class Key {
private final int x ;
private final int y ;
public Key ( int x , int y ) {
this . x = x ;
this . y = y ;
}
@Override
public boolean equals ( Object o ) {
if ( this == o ) return true ;
if ( ! ( o instanceof Key ) ) return false ;
Key key = ( Key ) o ;
return x == key . x && y == key . y ;
}
@Override
public int hashCode ( ) {
int result = x ;
result = 31 * result + y ;
return result ;
}
}
以這種方法提前包裝好一個類,類中有x和y兩個屬性,同時提供equals方法用於「點」的比較,提供hashCode用於使用在計算對象在散列表中的位置。
為什麼要覆蓋hashCode方法?請 參見鏈接
寫完這個pair類之後,就好用了:
實現了pair類之後的雙key的MAP寫法
Java
Map<Key, V> map = //...
map.get(new Key(2, 5));
Map < Key , V > map = //...
map . get ( new Key ( 2 , 5 ) ) ;
這種方法以更多的代碼為代價來實現pair key的map,pair class的編寫中,不能忘記覆蓋equals和hashcode方法,增加了代碼量,感覺不是很好用。
GOOGLE的HashBasedTable類庫
這種方法感覺才是最直觀,最好用的
使用GOOGLE的HashBasedTable實現PAIR KEY
Java
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
// 創建
Table<Long, Long, Point> plane = HashBasedTable.create();
// 新增
plane.put(1L, 2L, pointA);
plane.put(1L, 3L, pointB);
plane.put(1L, 4L, pointC);
// 獲取
Point pointA = plane.get(1L, 2L);
Point pointB = plane.get(1L, 2L);
import com . google . common . collect . HashBasedTable ;
import com . google . common . collect . Table ;
// 創建
Table < Long , Long , Point > plane = HashBasedTable . create ( ) ;
// 新增
plane . put ( 1L , 2L , pointA ) ;
plane . put ( 1L , 3L , pointB ) ;
plane . put ( 1L , 4L , pointC ) ;
// 獲取
Point pointA = plane . get ( 1L , 2L ) ;
Point pointB = plane . get ( 1L , 2L ) ;
驚嘆,好用。在JAVA語言里,寫成這樣的代碼,可稱之為藝術。
無限維度的KEY
有兩種方法可以實現無線維度的KEY,第一種和本文的第二種方法一樣,先寫一個CLASS,裡面有無限個屬性,然後作為MAP的KEY。
第二種,如果類型一樣,可以這樣子實現:
使用List作為無限MAP的KEY
Java
Map<List<Integer>, V> map = //...
Map < List <Integer> , V > map = //...
但是這種方法易出錯、不易讀,並且性能很低。
總結
要實現map的key是兩個綁定的屬性,或者稱之為pair key,個人認為首先使用google的HashBasedTable類庫,其次的方法是編寫對應的class。
『叄』 java中map<key,value>是什麼意思
key和value代表鍵和值,你可以想像成兩個值一一對應,可以根據key查找到value的值。你可以把省作為key,省會作為value,根據省可以查到省會。或者把整數作為key,任何對象作為value,就和數組一樣根據整數能找到對應的對象
『肆』 java map 多少個key
map是將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射到一個值。
map可以包含N個不重復的KEY。
『伍』 JAVA基礎 key在這里干什麼搞不懂
key在這里是你要查找的內容(文字列)。
舉個例子
Stringstr="abcdef";
Stringkey="cde";
intindex=1;
這時
str.indexOf(key,index)
就返回2。因為我們從"abcdef"的index=1(b的位置)開始找,找到了"cde","cde"在str中的index=2。
此時,我們要繼續找到話就要從 str 的 index = 2 + 3 的地方開始找。
2代表的是 "cde"在str中的index
3代表的是"cde"的長度,也就是key.length()。
『陸』 Java中Map和Map<key,value>的區別。
Map<key,value>是Map的一個泛型形式,倆個Map之間實際上是一個東西,但是用法卻有點不一樣
Map:裡面存放的是鍵值對集合,鍵值對的類型可以是任意封裝類型
例:
Mapmap=newHashMap();
//以下的倆種使用方式都是對的
map.put("a",1);
map.put(11,"abc");
Map<key,value>:裡面存放的也是鍵值對集合,但是類型只能是<>中指定的類型
例:
Map<String,Integer>map=newHashMap<String,Integer>();
//正確使用方式
map.put("a",1);
//錯誤使用方式,會導致無法通過編譯
map.put(11,"abc");
『柒』 JAVA語言中KeyListener介面的使用,即keyPressed、keyTyped和keyReleased三種方法的按鍵應該是如何操作的
修改一下構造函數:
public KeyinEvent()
{
super("按鍵測試");
c=getContentPane();
c.setLayout(new FlowLayout());
c.add(textarea);
textarea.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e)
{
String line1="按鍵"+e.getKeyChar();
String line2="按鍵是否為Action鍵"+e.isActionKey();
String mkey=e.getKeyModifiersText(e.getModifiers());
String line3="是否按下Modifier鍵"+(mkey.equals("")?"否":"是,其鍵為:"+mkey);
textarea.setText(line1+"\n"+line2+"\n"+line3+"\n");
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
});
//textarea.setText("請按任意鍵");
// addKeyListener(this);
setSize(300,120);
setVisible(true);
//addKeyListener(this);
}
運行是游標定位到testarea上,所以要在testarea加監聽器才會起效
『捌』 java怎麼取map中的key值
map迭代,需要使用map的key,問度娘後記錄使用方法如下,希望更多人能學習到.
public class MyUtil1 {
public static void
iteratorMap1(Map m) {
Set
set=m.keySet();//用介面實例介面
Iterator iter =
set.iterator();
while (iter.hasNext())
{//遍歷二次,速度慢
String
k=(String)iter.next();
System.out.println(k +"="+ m.get(k));
//System.out.println(iter.next()+"="+
m.get(iter.next()));
//因為指針判斷下一個有沒有值 iter.next是當前對象
但是 m.get(iter.next())是下一個值
}
public static void iteratorMap(Map m){
Iterator
i=m.entrySet().iterator();
while(i.hasNext()){//只遍歷一次,速度快
Map.Entry
e=(Map.Entry)i.next();
System.out.println(e.getKey()+"="+e.getValue());
//System.out.println(e.setValue(""));//返回value的值
}
}
『玖』 java怎麼獲取map的key
map迭代,需要使用map的key,問度娘後記錄使用方法如下,希望更多人能學習到.
public class MyUtil1 {
public static void
iteratorMap1(Map m) {
Set
set=m.keySet();//用介面實例介面
Iterator iter =
set.iterator();
while (iter.hasNext())
{//遍歷二次,速度慢
String
k=(String)iter.next();
System.out.println(k +"="+ m.get(k));
//System.out.println(iter.next()+"="+
m.get(iter.next()));
//因為指針判斷下一個有沒有值 iter.next是當前對象
但是 m.get(iter.next())是下一個值
}
public static void iteratorMap(Map m){
Iterator
i=m.entrySet().iterator();
while(i.hasNext()){//只遍歷一次,速度快
Map.Entry
e=(Map.Entry)i.next();
System.out.println(e.getKey()+"="+e.getValue());
//System.out.println(e.setValue(""));//返回value的值
}
}
『拾』 java里老是說key,這是什麼東東
容器中的key嗎就是,key-value這兩個東東在容器中,key就是你對象的一個命名,value就是對象本身。相當與字典一樣從key找value。