JAVA数组详解

Java中 int[ ] n 和 int n[ ]区别

前者是定义一个叫做n的int数组(类型上就是数组,定义了一个变量)。
后者是定义int,但这个int变量n是一个数组(类型上不是数组,定义了一组变量)。不过两句话结果一样,灵活使用即可。没区别,JAVA的写法是int[] n , int n[]是按c语言的习惯写的,java为了让C语言的程序员好上手提供了这两种写法。

Java中的数组和C/C++中的不同,Java中的数组是对象。因为是对象,所以数组名是对象引用;是引用,并不是数组本身,所以在声明时也不能指定大小;因为是引用,所以对数组进行复制操作,直接对数组名进行复制是可以的。

int[] aa=new int[5]{1,5,9,5,6} 错误的写法

报错:Cannot define dimension expressions when an array initializer is provided原因:很简单,如果初始化了数组里面的元素,可自动获取数组大(因为数组大小是数组的固有成员),新建数组时加上大小,画蛇添足

1.  声明一个数组 

数组动态初始化

1. String[] aArray = new String[5];  

数组静态初始化

2. String[] bArray = {"a","b","c""d""e"};  

3. String[] cArray = new String[]{"a","b","c","d","e"};  


2只创建了一个String[]数组对象bArray

3.创建了两个String[]数组对象cArray new String[] {"a","b","c","d","e"},

相当于我创建了 new String[] {"a","b","c","d","e"};这个对象,然后把这个对象的引用赋给cArray是对象引用不是对象)

String str=new String("abc"); 创建了2个String对象:
可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("abc")了。那么,new String("abc")看成"abc"和new String():String的构造器:  
public String(String original) {  //other code ...  }   ,创建一个类的实例(对象)的方法有以下两种:
一、使用new创建对象。
二、调用Class类的newInstance方法,利用反射机制创建对象。
使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。引入另外一种创建String对象的方式的讨论——引号内包含文本。
 
这种方式是String特有的,并且它与new的方式存在很大区别。  
String str="abc";  
这行代码创建了一个String对象。  
String a="abc";  String b="abc";  
答案还是一个。  
String a="ab"+"cd";   
答案是三个。
说到这里,需要引入对字符串池相关知识的回顾。  
JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此不用担心String对象共享而带来程序的混乱。字符串池由String类维护,可以调用intern()方法来访问字符串池。  
再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回
 
只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中,对此我们不再赘述。因此用引号包含文本的方式来创建String对象以提高效率,实际上这也是在编程中常采用的。


栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象


2.  输出一个数组 

1. int[] intArray = { 12345 };  

2. String intArrayString = Arrays.toString(intArray);  

3. // print directly will print reference value  

4. System.out.println(intArray);  

5. // [I@7150bd4d  

6. System.out.println(intArrayString);  

7. // [1, 2, 3, 4, 5]  



3.  从一个数组创建数组列表 

1. String[] stringArray = { "a""b""c""d""e" };  

2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  

3. System.out.println(arrayList);  



4.  检查一个数组是否包含某个值 

1. String[] stringArray = { "a""b""c""d""e" };  

2. boolean b = Arrays.asList(stringArray).contains("a");  

3. System.out.println(b);  

4. // true  



5.  连接两个数组 

1. int[] intArray = { 12345 };  

2. int[] intArray2 = { 678910 };  

3. // Apache Commons Lang library  

需要引入这个import org.apache.commons.lang.ArrayUtils;

4. int[] combinedIntArray = ArrayUtils.addAll(intArray, intArray2);  



6.  声明一个内联数组(Array inline) 

1. method(new String[]{"a""b""c""d""e"});  


7.  把提供的数组元素放入一个字符串 

1. // containing the provided list of elements  

2. // Apache common lang  

3. String j = StringUtils.join(new String[] { "a""b""c" }, ", ");  

4. System.out.println(j);  

5. // a, b, c  



8.  将一个数组列表转换为数组 

1. String[] stringArray = { "a""b""c""d""e" };  

2. ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));  

3. String[] stringArr = new String[arrayList.size()];  

4. arrayList.toArray(stringArr);  

5. for (String s : stringArr)  

6.     System.out.println(s);  



9.  将一个数组转换为集(set) 

1. Set<String> set = new HashSet<String>(Arrays.asList(stringArray));  

2. System.out.println(set);  

3. //[d, e, b, c, a]  



10.  逆向一个数组 

1. int[] intArray = { 12345 };  

2. ArrayUtils.reverse(intArray);  

3. System.out.println(Arrays.toString(intArray));  

4. //[5, 4, 3, 2, 1]  



11.  移除数组中的元素 

1. int[] intArray = { 12345 };  

2. int[] removed = ArrayUtils.removeElement(intArray, 3);

3. //create a new array  

4. System.out.println(Arrays.toString(removed));  



12.  将整数转换为字节数组 

1. byte[] bytes = ByteBuffer.allocate(4).putInt(写入int的值).array();  

2. for (byte t : bytes) {  

3.    System.out.format("0x%x ", t);  

Java数组转成list,list转数组

http://jingyan.baidu.com/article/86f4a73e607f2937d7526972.html

数组转成list

String[] userid = {"aa","bb","cc"};

List<String> userList = new ArrayList<String>();

Collections.addAll(userList, userid);

String[] userid = {"aa","bb","cc"};

List<String> userList = Arrays.asList(userid);

另:Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。

List list = new ArrayList(Arrays.asList(userid));这样操作就可以了。

String[] userid = {"aa","bb","cc"};

List<String> userList = new ArrayList<String>(userid.length);

for(String uid: userid){

userList.add(uid);

list转数组

List<String> strList = new ArrayList<String>();

strList.add("aa");

strList.add("bb");

Object[] objs = strList.toArray();

--------------

如果要变成String数组,需要强转类型。

String[] strs = (String[]) strList.toArray(new String[0]);

-----------------

也可以指定大小:

String[] strs = strList.toArray(new String[strList.size()]);

List<String> strList = new ArrayList<String>();

strList.add("aa");

strList.add("bb");

String[] strs = new String[strList.size()];

猜你喜欢

转载自blog.csdn.net/xxdw1992/article/details/80002455