您的位置:首页 > 职场人生

黑马程序员--第十七天:Collections 类, Arrays 类

2013-05-31 11:41 190 查看
---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

 

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/*17-10_15
集合框架工具类。
Collections:
Collections.sort(list, cmp);
String s = Collections.max(list,cmp);
int index = Collections.binarySearch(list, "aahjt");

fill();
replaceAll();
reverse();

reverseOrder(comparator);

synchronizedList(list);
synchronizedMap();
synchronizedSet();

shuffle(list);
swap(list,index1,index2);
*/
public class MyDemo {

public static void main(String []args){

sortDemo();
}

public static void sortDemo(){
List<String> list = new ArrayList<String>();
Comparator cmp = new StrLenComparator();

list.add("adf");
list.add("asdf");
list.add("addf");
list.add("aahjt");
list.add("a");

System.out.println(list);

//Collections.sort(list);
Collections.sort(list, cmp);
System.out.println(list);
//		String s = Collections.max(list,cmp);
//		System.out.println(s);

int in = halfSearch(list, "as");
//		int index = Collections.binarySearch(list, "aahjt");
//		System.out.println(list.contains("adf"));
//
//		System.out.println(index);
System.out.println(in);
System.out.println(list);
}

public static int halfSearch(List<String> list, String key){
int min = 0, max = list.size()-1;
Comparator cmp = new StrLenComparator();
while(min<=max){
int mid = (min + max) >>1;
String s = list.get(mid);
int num = s.compareTo(key);
int num1 = cmp.compare(list.get(mid), key);
if(num<0)
min = mid +1;
else if(num>0)
max = mid -1;
else
return mid;
}
return -min-1;
}
}

class StrLenComparator implements Comparator<String>{

@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.length()-o2.length();
}
}


 

/*17-16
Arrays:用于操作数组的工具类。
里面都是静态方法。

asList:将数组变成List集合。
*/

class
{
public static void main(String[] args)
{
int[] arr = {1, 2 ,4};
System.out.println(Arrays.toString(arr));

String[] arr = {"abc", "ac", "adkj"};

//把数组变成集合有什么好处?
/*
可以使用集合的思想和方法来操作数组元素。

注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的。

contains
get
indexOf
subList();
如果增删了,会发生 UnsupportedOperationException.
*/

List<String> list = Arrays.asList(arr);
sop("contains: " + list.contains("ac");
list.add("adf");
sop(list);

int[] nums = {2, 3, 5};

List li = Arrays.asList(nums);
//List<int []> li = Arrays.asList(nums);

//如果数组中的元素都是对象,那么变成集合时数组中的元素就直接转成集合中的元素。
//如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

sop(li);

Integer[] integers = {1,2,3};
List intList = Arrays.asList(integers);
//		List<Integer> intList = Arrays.asList(integers);

sop(intList);
}

public static boolean myContains(String[] arr, String key){
for(String s : arr){
if(s.equals(key))
return true;
}
return false;
}

public static void sop(Object obj){
System.out.println(obj);
}
}


 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/*17-17_20
高级for循环:

对集合进行遍历。
只能获取集合元素,但是不能对集合进行操作

迭代器除了遍历,还可以进行remove集合中的元素动作。

如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作。

高级for循环和传统for循环有什么区别。
高级for有一个局限性。必须有被遍历的目标。

建议在遍历数组的时候,还是用传统的for,因为传统for可以对角标进行操作。

JDK1.5 版本的新特性:

方法的可变参数。
在使用是注意,可变参数一定要定义在参数列表最后面。

可变参数:
其实就是上一种数组参数的简写形式。
不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。
隐式将这些参数封装成了数组。
*/
public class CollectionToArray {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

ArrayList<String> al = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
al.add("ad1");
al.add("ad2");
al.add("ad3");
a2.add("ad3");
a2.add("ad3");
a2.add("ad3");
String[] strs = {"ths","is","string"};
String[] strs1 = {"strs1,,,","ths","is","string"};

List list = Arrays.asList("this","ida","dsf");//当传入的是多个参数时,会默认以可变参数来处理,把多个参数封装到一个新的数组中。
list = Arrays.asList(strs,strs1);//当传入的是多个数组是,会吧多个数组同时封装到一个新的数组中。
list = Arrays.asList("this");//当传入的参数只要一个时,若不是数组,会自动把它封装到数组中
list = Arrays.asList(strs);//当传入的是一个数组是,会默认的不以可变参数的形式处理,以和之前版本兼容,所以该数组不会再被封装到一个数组中

System.out.println(list);
System.out.println("this is ");
/*
1.指定类型的数组到底要定义多长呢?
当指定的类型的数组长度小于了集合的size,那么该方法内部就会创建一个长度为集合的size的数组
当指定类型的数组的长度大于了集合的size,就不会新建数组,而是使用传递进来的数组。
所以创建一个刚刚好的数组最优

2.为什么要把集合转换成数组?
为了限定对元素进行操作,不需要进行增删了。
*/

String[] arr = al.toArray(new String[al.size()]);//toArray(T); 集合转成数组
System.out.println(Arrays.toString(arr));
}

}


 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  黑马程序员
相关文章推荐