List方法
void add(index,ele);
boolean allAll(index,Collection);
int indexOf(obj);
int lastIndexOf(obj);
object remove(index);
Object set(index,ele);
List subList(fromIndex,toIndex);
形参长度可变的参数
public static void main(String[] args) {
test("aa","bb","cc","dd");
test(new String[]{"1","2"});
List list = Arrays.asList("a","b","c");
}
private static void test(String ... str) {
}
TreeMap中的所有key必须为同一个类的对象,否则会报ClassCastException
定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key排序。
读属性文件
Properties properties = new Properties();
InputStream inStream = Test7.class.getClassLoader().getResourceAsStream("es.properties");
properties.load(inStream);
String ip = properties.getProperty("elasticSearchIp");
System.out.println(ip);
reverse(List) //反转List 集合中的元素
shuffle(List) //对List 集合进行随机排序
sort(List) //进行升序排序
sort(List,Comparator) //根据比较器进行排序
swap(List,int,int) //对i 处元素与 j 处元素进行交换
获取线程安全的集合对象
ArrayList,HashSet,HashMap...都不是线程安全的
调用Collections 的 synchronlizedXxx 方法获取纯种安全的对象集合
List list = new ArrayList();
List list2 = Collections.synchronizedList(list);//线程安全
List<Person> list = new ArrayList<Person> ();
list.add(new Person("name1",11));
list.add(new Person("name2",10));
Collections.sort(list,new Comparator(){
@Override
public int compare(Object obj1, Object obj2) {
if(obj1 instanceof Person && obj2 instanceof Person ){
Person p1 = (Person) obj1;
Person p2 = (Person) obj2;
return p1.getAge()-p2.getAge();
}
throw new ClassCastException();
}
});
Set<Person> persons =new TreeSet<Person>(new Comparator<Person>(){
@Override
public int compare(Person p1, Person p2) {
return p1.getAge()-p2.getAge();
}
});
Object[] objs = new Object[10];
Person[] personss = new Person[10];
//相等,Object是Persion的父亲,Object数组也是Persion数组的父类
objs = personss;
List<Object> objList = new ArrayList();
List<Person> personList = new ArrayList();
//相等,Object是Person的父亲,Object List 却不是Person List的父类
//objList!=persionList;
//通配符的泛型声明。只要存在通配符,写入就是非法的
public void print(List<? extends Person> persons){
}
//要求传入的参数必须是Persion
public void print2(List<Person> persons){
}
//在类中使用泛型方法
//在方法的返回值使用<>前面声明泛型类型,则在方法的参数,方法体中都可以使用该泛型
//第二个E代表返回值也是泛型
public <E> E getProperty(int id, E obj){
E result = null;
return result;
}
Collection<Person> co = new ArrayList<Person>();
co.add(new Person());
co.add(new Person());
co.add(new Person());
co.add(new Person());
//转为Persion类型的数组,new Persion[0]只是为了说明类型是什么,下标不重要
Person[] persionArray = persions.toArray(new Person[0]);
System.out.println(persionArray.length);
Map<String,Person> map = new HashMap<String,Person> ();
map.put("name1", new Person("name1",10));
map.put("name2", new Person("name2",80));
map.put("name3", new Person("name3",20));
for(Map.Entry<String, Person> entry : map.entrySet()){
String key = entry.getKey();
Person person = entry.getValue();
}
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
Person person = map.get(key);
}
泛型:泛型类,泛型方法
泛型类:类或者接口名称后使用<T>,凡类中需要用到泛型的地方都能用
泛型方法:泛型方法可以不在泛型类中
基本的Annotation
@Override,@Deprecated,@suppressWarnings
//jdk的元注解
@Retention(RetentionPolicy.RUNTIME)
public @interface Hello{
//注解的属性
String major();
int age();
String school()default "name";
}
//使用
@Hello(age=12,major="java")
public Class A{
}