Java复习第三天---集合框架的相关知识

集合框架总览:

Collection 接口常用方法
//1.add()向集合中添加数据
c.add(apple01);
c.add(apple02);
c.add(apple03);
c.add(apple04);
c.add(apple05);
//2.isEmepty()检测当前集合是否为空
boolean empty = c.isEmpty();
System.out.println("is empty:"+empty);
//3.size()返回当前集合的长度
int size = c.size();
System.out.println("size:"+size);
//4.contains()检测当前集合是否包含某个指定的对象,判断的标准与具体的集合实现类有关,
//一般来说取决于集合元素的hashCode()方法和equals()方法
boolean contains = c.contains(apple03);
System.out.println("contains:"+contains);
//5.remove()删除指定元素
c.remove(apple04);
System.out.println("size:"+c.size());
//6.toArray()将当前集合转为一个Object类型的数组
Object[] array = c.toArray();
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
集合遍历方式之iterator
//1.获取Iterator迭代器
Iterator iterator = c.iterator();
//2.循环检查是否还存在“下一个”元素,使用iterator.hasNext()
//遍历开始之前,游标指向的是第一个元素“之前”的位置
//当游标指向最后一个元素时,iterator.hasNext()返回false,退出循环
while(iterator.hasNext()){
//3.在循环体中使用next()方法获取当前游标指向的元素
Object next = iterator.next();
System.out.println(next);
}
集合遍历方式之增强for循环
/*
 增强for循环的格式
 for(元素的类型 用来接收当前元素的变量 : 要遍历的集合){
System.out.println(指向当前元素的变量);
} 
 */
for(Object o : c){
System.out.println("~"+o);
}
Set接口之HashSet
HashSet判断两个元素相等的标准:
  1.hashCode()返回值相等
  2.equals()方法返回true
  要保证equals()方法返回true时,两个对象的hashCode()方法返回值相等
Set接口之LinkedHashSet
Set集合之TreeSet
自然排序:要求元素对象实现Comparable接口
/**
 * 比较当前类的实例对象和传入的参数对象
 * @return 返回整型,根据整型值判断两个对象的前后顺序
 */
@Override
public int compareTo(Object o) {
if(this == o){
return 0;
}
if(o instanceof Apple){
Apple otherApple = (Apple) o;
return appName.compareTo(otherApple.appName);
}
return 0;
}
定制排序:要求将一个Comparator接口的实现对象传入TreeSet构造器中
//TreeSet集合的定制排序:
Comparator comparator = new Comparator() {
//匿名内部类:强行创建接口或抽象类的对象时,系统会要求在创建对象的地方把抽象方法实现
@Override
public int compare(Object o1, Object o2) {
if(o1 == o2){
return 0;
}
if(o1 instanceof Banana && o2 instanceof Banana){
Banana ban01 = (Banana) o1;
Banana ban02 = (Banana) o2;
return ban01.getBanName().compareTo(ban02.getBanName());
}
return 0;
}
};
//定制排序要求将Comparator的实现对象传入TreeSet(comparator)构造器中
Set appSet = new TreeSet(comparator);
List接口
//ListIterator提供了新的方法,可以实现从后向前遍历,使用时要注意当前游标的位置
while (listIterator.hasPrevious()){
Object previous = listIterator.previous();
System.out.println(previous);
}
Arrays.asList()方法
将一组数据转换为List集合
List asList = Arrays.asList(new String[]{"apple","banana","watermelon"});
Iterator iterator = asList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
LinkedList
void addFirst(Object obj)
appList.addFirst(apple06);
void addLast(Object obj)
appList.addLast(apple07);
Object getFirst()
appList.getFirst()
Object getLast()
appList.getLast()
Object removeFirst()
appList.removeFirst();
Object removeLast()
appList.removeLast();
Vector
void addElement(Object obj)
Apple apple06 = new Apple("New Apple");
appList.addElement(apple06);添加元素
void insertElementAt(Object obj,int index)
Apple apple07 = new Apple("Insert Apple");
appList.insertElementAt(apple07, 3);在指定位置添加元素
void setElementAt(Object obj,int index)
Apple apple08 = new Apple("Replace Apple~");
appList.setElementAt(apple08, 3);将指定索引值的元素替换为新元素
void removeElement(Object obj)
appList.removeElementAt(3);删除指定位置的元素
appList.removeElement(apple04);删除指定元素,如果有多个则删除第一个
appList.removeAll(Arrays.asList(apple04,apple02));将参数集合中涉及到的全部元素都删除,即使有多个也全部删除
void removeAllElements()
appList.removeAllElements();删除集合中的全部元素




内部类:

package net.csdn.inner;
 
public class Outter {
private String outData = "outData";
private static String sOutData = "static out data";
//和属性、方法一样,内部类也是外部类的成员,可以使用4种权限修饰符修饰
class Inner {
//非静态内部类中不能有静态成员
/*public static void test(){
}*/
public void getData(){
//在非静态内部类的非静态资源中,外部类的非静态资源可以直接拿来用
System.out.println("~"+outData);
System.out.println("~s"+sOutData);
}
public void showMsg(){
System.out.println("I am inner");
}
}
//静态的内部类同样遵循静态资源访问的原则:资源本身可以使用类名.资源的方式访问
//静态资源内不能直接访问当前类(外部类)的非静态资源
static class StaticInner {
public static final String DATA = "static data";
public void showMsg(){
//静态内部类的非静态方法中获取外部类的非静态资源,需要创建外部类对象
System.out.println("->"+new Outter().outData);
System.out.println("s->"+sOutData);
System.out.println("I am static inner");
}
public static void getData(){
//静态内部类的静态方法中获取外部类的静态资源,直接访问
System.out.println("~s->"+sOutData);
}
}
public StaticInner getStaticInner(){
//在外部类的内部创建静态内部类的对象,new 外部类类名.内部类构造器
StaticInner staticInner = new StaticInner();
return staticInner;
}
public Inner getInner(){
//在外部类的内部创建内部类的对象,直接new
Inner inner = new Inner();
return inner;
}
public static void main(String[] args) {
Outter outter = new Outter();
Inner inner = outter.getInner();
inner.showMsg();
inner.getData();
/*StaticInner staticInner = outter.getStaticInner();
staticInner.showMsg();*/
//在静态方法或main方法中静态内部类的对象可以直接new
StaticInner staticInner = new StaticInner();
staticInner.showMsg();
StaticInner.getData();
System.out.println(StaticInner.DATA);
}
 
}
 
//这只是同一个源文件中的另一个类,和Outter没有什么关系
//只是,Outter使用public修饰后,就不能用public修饰了
//对于外部类来说,权限修饰符只有public、default
class Other {
}



Java复习第三天---集合框架的相关知识,布布扣,bubuko.com

Java复习第三天---集合框架的相关知识

上一篇:JQuery中$.ajax()方法参数详解 ASP.NET jquery ajax传递参数


下一篇:python中多线程调度机制以及GIL