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 = { 1, 2, 3, 4, 5 };
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 = { 1, 2, 3, 4, 5 };
2. int[] intArray2 = { 6, 7, 8, 9, 10 };
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 = { 1, 2, 3, 4, 5 };
2. ArrayUtils.reverse(intArray);
3. System.out.println(Arrays.toString(intArray));
4. //[5, 4, 3, 2, 1]
11. 移除数组中的元素
1. int[] intArray = { 1, 2, 3, 4, 5 };
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()];