자바 연관 배열
PHP에서와 같이 Java로 연관 배열을 만들고 가져올 수 있습니까?
예를 들면 다음과 같습니다.
$arr[0]['name'] = 'demo';
$arr[0]['fname'] = 'fdemo';
$arr[1]['name'] = 'test';
$arr[1]['fname'] = 'fname';
Java는 연관 배열을 지원하지 않지만을 사용하여 쉽게 달성 할 수 있습니다 Map
. 예 :
Map<String, String> map = new HashMap<String, String>();
map.put("name", "demo");
map.put("fname", "fdemo");
// etc
map.get("name"); // returns "demo"
예를 들어 훨씬 더 정확한 것은 (문자열을 필요에 맞는 객체로 바꿀 수 있기 때문에) 다음과 같이 선언하는 것입니다.
List<Map<String, String>> data = new ArrayList<>();
data.add(0, map);
data.get(0).get("name");
Java에는 PHP와 같은 연관 배열이 없습니다.
맵 사용과 같이 수행중인 작업에 대한 다양한 솔루션이 있지만 정보를 찾는 방법에 따라 다릅니다. 모든 정보를 보유하고 클래스의 인스턴스를에 저장하는 클래스를 쉽게 작성할 수 있습니다 ArrayList
.
public class Foo{
public String name, fname;
public Foo(String name, String fname){
this.name = name;
this.fname = fname;
}
}
그리고...
List<Foo> foos = new ArrayList<Foo>();
foos.add(new Foo("demo","fdemo"));
foos.add(new Foo("test","fname"));
그래서 당신은 그들처럼 액세스 할 수 있습니다 ...
foos.get(0).name;
=> "demo"
지도를 통해이 작업을 수행 할 수 있습니다. 같은 것
Map<String, String>[] arr = new HashMap<String, String>[2]();
arr[0].put("name", "demo");
그러나 Java를 사용하기 시작하면 데이터를 나타내는 클래스 / 모델을 만들면 최선의 선택이 될 것입니다. 나는 할것이다
class Person{
String name;
String fname;
}
List<Person> people = new ArrayList<Person>();
Person p = new Person();
p.name = "demo";
p.fname = "fdemo";
people.add(p);
Java에는 연관 배열과 같은 것이 없습니다. 가장 가까운 상대는 Map
입니다.이 형식은 강력하게 입력되지만 구문 / API는 적습니다.
이것은 귀하의 예를 기반으로 얻을 수있는 가장 가까운 것입니다.
Map<Integer, Map<String, String>> arr =
org.apache.commons.collections.map.LazyMap.decorate(
new HashMap(), new InstantiateFactory(HashMap.class));
//$arr[0]['name'] = 'demo';
arr.get(0).put("name", "demo");
System.out.println(arr.get(0).get("name"));
System.out.println(arr.get(1).get("name")); //yields null
상기 봐 맵 인터페이스 및 콘크리트 클래스에서 의 HashMap .
지도를 만들려면
Map<String, String> assoc = new HashMap<String, String>();
키-값 쌍을 추가하려면
assoc.put("name", "demo");
키와 관련된 값을 검색하려면
assoc.get("name")
그리고 원하는 것처럼 보이는지도 배열을 만들 수 있습니다.
Map<String, String>[] assoc = ...
글쎄, 나는 또한 연관 배열을 찾고 있었고 최상의 솔루션으로 맵 목록을 찾았습니다.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class testHashes {
public static void main(String args[]){
Map<String,String> myMap1 = new HashMap<String, String>();
List<Map<String , String>> myMap = new ArrayList<Map<String,String>>();
myMap1.put("URL", "Val0");
myMap1.put("CRC", "Vla1");
myMap1.put("SIZE", "Vla2");
myMap1.put("PROGRESS", "Vla2");
myMap.add(0,myMap1);
myMap.add(1,myMap1);
for (Map<String, String> map : myMap) {
System.out.println(map.get("URL"));
}
//System.out.println(myMap);
}
}
HashMap<Integer, HashMap<String, String>> hash;
Java doesn't have associative arrays, the closest thing you can get is the Map interface
Here's a sample from that page.
import java.util.*;
public class Freq {
public static void main(String[] args) {
Map<String, Integer> m = new HashMap<String, Integer>();
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null) ? 1 : freq + 1);
}
System.out.println(m.size() + " distinct words:");
System.out.println(m);
}
}
If run with:
java Freq if it is to be it is up to me to delegate
You'll get:
8 distinct words:
{to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}
Use ArrayList < Map < String, String > >
Here a code sample :
ArrayList<Map<String, String>> products = new ArrayList<Map<String, String>>();
while (iterator.hasNext()) {
Map<String, String> product = new HashMap<String, String>();
Element currentProduct = iterator.next();
product.put("id",currentProduct.get("id"));
product.put("name" , currentProduct.get("name") );
products.add(product );
}
System.out.println("products : " + products);
Output :
products : [{id=0001, name=prod1}, {id=0002, name=prod2}]
Associative arrays in Java like in PHP :
SlotMap hmap = new SlotHashMap();
String key = "k01";
String value = "123456";
// Add key value
hmap.put( key, value );
// check if key exists key value
if ( hmap.containsKey(key)) {
//.....
}
// loop over hmap
Set mapkeys = hmap.keySet();
for ( Iterator iterator = mapkeys.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
String value = hmap.get(key);
}
More info, see Class SoftHashMap : https://shiro.apache.org/static/1.2.2/apidocs/org/apache/shiro/util/SoftHashMap.html
In JDK 1.5 (http://tinyurl.com/3m2lxju) there is even a note: "NOTE: This class is obsolete. New implementations should implement the Map interface, rather than extending this class." Regards, N.
Object[][] data = {
{"mykey1", "myval1"},
{"mykey2", "myval2"},
{new Date(), new Integer(1)},
};
Yes, this require iteration for searchting value by key, but if you need all of them, this will be the best choice.
Actually Java does support associative arrays they are called dictionaries!
Thinking more about it, I would like to throw out tuples as a more general-purpose way of dealing with this problem. While tuples are not native to Java, I use Javatuples to provide me the same functionality which would exist in other languages. An example of how to deal with the question asked is
Map<Pair<Integer, String>, String> arr = new HashMap<Pair<Integer, String>, String>();
Pair p1 = new Pair(0, "name");
arr.put(p1, "demo");
I like this approach because it can be extended to triples and other higher ordered groupings with api provided classes and methods.
Regarding the PHP comment 'No, PHP wouldn't like it'. Actually, PHP would keep on chugging unless you set some very restrictive (for PHP) exception/error levels, (and maybe not even then).
What WILL happen by default is that an access to a non existing variable/out of bounds array element 'unsets' your value that you're assigning to. NO, that is NOT null. PHP has a Perl/C lineage, from what I understand. So there are: unset and non existing variables, values which ARE set but are NULL, Boolean False values, then everything else that standard langauges have. You have to test for those separately, OR choose the RIGHT evaluation built in function/syntax.
참고URL : https://stackoverflow.com/questions/5122913/java-associative-array
'IT story' 카테고리의 다른 글
SQL 대소 문자 구분 문자열 비교 (0) | 2020.05.08 |
---|---|
Cocoa 앱에서 터미널 명령 실행 (0) | 2020.05.08 |
grep으로 한 줄에 두 줄을 일치시킵니다. (0) | 2020.05.08 |
데이터 프레임에서 행을 어떻게 삭제합니까? (0) | 2020.05.08 |
1030 저장소 엔진에서 28 오류가 발생했습니다 (0) | 2020.05.08 |