2013-10-29 2 views
2

내가 여기이 경고 을 받고 있어요 코드입니다 :해시 테이블 원시 형

Hashtable nu=new Hashtable(); 
Hashtable ns=new Hashtable(); 
nu.put(new String("postmaster"),new String("admin")); 
ns.put(new String("SMTP"),new String("")); 
ns.put(new String("POP3"),new String("")); 
ns.put(new String("EMAIL"),new String("")); 
ns.put(new String("USER"),new String("")); 
ns.put(new String("PASS"),new String("")); 

경고 : [선택 해제] 선택하지 않은 전화는 넣어 (K를, V) 원시 형 해시 테이블의 저 mber로

+0

이 제네릭 – upog

답변

0

Hashtable은 두 가지 제네릭 형식 매개 변수가있는 제네릭 클래스입니다.

봅니다 :

Hashtable<String, String> nu = new Hashtable<>(); 

은 일반 매개 변수 (이 예에서는 StringString)를 지정하는 데 필요하지 않습니다. 그러나 지정하지 않으면 언급 한 경고가 표시됩니다.

자세한 내용은 Hashtable javadocsection about generics in the oracle java documentation을 참조하십시오. 인터페이스에 더 나은

Hashtable<String, String> 

또는 코드 :

Map<String, String> ns = new Hashtable<String, String>(); 

을 그리고 어쩌면 당신은 할 수 당신이 Hashtable를 선언 할 때 일반적인 유형을 사용하려는 경우

0

, 경고 멀리 갈 것입니다 지도에 대해 Hashtable보다 나은 구현을 찾으십시오. 예를 들어 HashMap :

4

Hashtable은 제네릭 유형입니다. 형식 인수를 사용하는 동안 해당 매개 변수가있는 형식을 사용해야합니다. Hashtable이라는 클래스 이름을 사용하는 것은 원시 형식이므로 사용해야하는 경우를 제외하고는 사용하지 않는 것이 좋습니다. 그러나, 당신은 또한 Hashtable을 사용하지 않아야합니다

Hashtable<String, String> nu = new Hashtable<String, String>(); 

:

그래서, 당신은 같은 객체를 생성한다. 그 이유는 모든 작업이 Hashtable이므로 동기화가 필요하기 때문입니다. 그것은 불필요하게 실행을 느리게 만듭니다. 대신 HashMap을 사용하는 것이 좋습니다. 이처럼 사용할 수 있습니다지도에 추가하면서

Map<String, String> map = new HashMap<String, String>(); 
Map<String, String> map2 = new HashMap<>(); // Valid from Java 7 onwards 

그 외에도에서, 당신은 new String(...)을 사용하여 새 String 객체를 만들 필요가 없습니다.

nu.put("postmaster", "admin"); // Will work fine 

관련 : 당신이 있습니까

+0

를 사용할 필요가 t 불필요한 객체 생성을 피하기 위해서 그냥 문자열 리터럴을 사용하여 틀림없이 불필요한 것을 줄일 것이다. 우리가'nu '를 사용한다면 객체 생성.nu.put (new String ("postmaster"), new String ("admin")) 대신에 put ("postmaster", "admin"); –

+0

예 .YegoshinMaxim 예. 문자열 리터럴은 Java에 의해 금지됩니다. 따라서 동일한 String 리터럴을 사용할 때마다 힙에 새 String 객체를 만드는 대신 String constant 풀에 저장된 참조가 사용됩니다. –

+0

왜지도 map = 새 HashMap (); 그리고 HashMap map = 새 HashMap (); –