数组
注:多维数组每一个维度的长度不一定一样长;
例如: int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];//正确
int t[][] = new int[][4];//非法
一维数组: int[] num=new int[10];
二维数组: int[][] nums=new int[2][3];//动态初始化
int a[][] = {{1,2}, {3,4,5,6}, {7,8,9}} //静态初始化
长度: num.length();长度不能改变
集合
List集合
创建:List list=new ArrayList();
list.add(“Hello”);
list.add(“World”);
list.add(“HAHAHAHA”);
List数组长度:num.size();长度可以改变
数组的遍历:for循环;foreach;迭代器
for循环遍历
for(int i=0 ; i<list.size();i++){
List kc = (List) list.get(i);
System.out.println("结果:"+kc.id+":"+kc.name+";");
}
foreach 遍历
for(Object obj : List){
System.out.println("课程:"+obj.id+":"+obj.name+";");
}
使用迭代器进行相关遍历
Iterator<String> ite=list.iterator();
while(ite.hasNext())//判断下一个元素之后有值
{
System.out.println(ite.next());
}
使用set方法修改元素
public void testModify(){
beixuan.set(0, new KeCheng("7","毛概"));
}
删除一个list中的元素,用remove()方法;删除list类型的数组用removeAll();
注:remove()方法有两种。1. remove(Object element)方法只在当前集合中按顺序移除一个元素。即使后边还有 与 element 相同的元素。也不再删除;2. remove(index)实例如下;
list.remove(list.get(0));
语法 removeAll(collection c)删除集合索引 index 处的元素,没有带下表的方法
List list1 =new ArrayList();
List list2 =new ArrayList();
list.add("aa");
list.add("bb");
list2.add(list1);// list2的长度为1
//处代码通过 add()方法将 list1 添加到 list2 集合中,注意add()方法加入的长度为1 ,
即把此前的 list1 当做一个元素集合来处理,并且以数组形式显示
list2.remove(0);// 删除成功
list2.remove(list1);//失效
list2.removeAll(list1);//删除成功
注:一个数组添加到另一个数组:list1.addAll(list);同removeAll()方法一样添加的只能是一个集合对象;而remove()括号里只能是一个下表或者元素。用一个集合add()方法添加另一个集合也是把那个集合作为一个元素,长度为集合的个数;一般用addAll()方法,长度为集合总的元素长度;
List list1 =new ArrayList();
List list2 =new ArrayList();
list.add("aa");
list.add("bb");
list2.add("11");
list2.add("22");
list2.add(1,list1);
syatem.out.print(list2);
输出结果为:aa,[11,22],bb
Map集合
创建:Map<String ,String> map=new HashMap<String,String>();
map.put(“1”, “value1”);
map.put(“2”, “value2”);
map.put(“3”, “value3”);
遍历:尤其是容量大时
1. 通过Map.entrySet遍历key和value
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
2. 通过Map.values()遍历所有的value,但不能遍历key
for (String v : map.values()) {
System.out.println("value= " + v);
}
Set集合
set存数据
创建Set set = new HashSet();(和list集合一样,但它里面不能有重复数据)
set.add(“JAVA”);
set.add(“C”);
set.add(“C++”);
set遍历
同list集合一样,三种遍历方式;
注:将set集合转换成list,可以找到指定位置的元素;将list转化为set,可以去重;
List list = new ArrayLsit(set);
for(int i=0 ;i<list.size(); i++){
system.out.print(list.get(i));
}
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Integer(1));
list.add(new Integer(3));
list.add(new Integer(3));
list.add(new Integer(5));
list.add(new Integer(5));
List list2 = transListToSet(list);
for (Object integer : list2) {
System.out.println("integer = " + integer);
} // 1 3 5
}
public static List transListToSet (List list) {
HashSet set = new HashSet();
set.addAll(list);
return new ArrayList(set);
}
set特点:无序,不重复;
总结:
1.set集合的底层运用的是hashSet,hashSe实际上是一个hashmap实例,只允许放一个null元素,不同步;
2. 保证不重复(去重): 运用equals()方法判断
3.Set 和Map的关系:
set代表无序,不能重复的集合。Map代表Key-Value键值对组成的集合,是一种关联数组。Map的key 不能冲重复,没有顺序。所以,把Map的所有key组合起来就是set.
TreeMap 底层是用红黑树来存储。每个Entry对应树的一个节点,TreeMap元素默认从小到达排序。V put(Key k, Value v)实质是二叉排序树的插入算法
ArrayList底层是数组 list是线性表的数据结构,ArrayList是顺序存储的线性表
LinkedList底层是链表;是链式存储的线性表,实质是双向链表,实现了List和Deque接口。Deque代表双端队列,既可以当做队列也可以当作栈。
Vector提供synchronized修饰方法,是线程安全版本的ArrayList,lVector 本质是一个数组,其实所有集合都是数组