数据结构是数据及其相互之间的联系(逻辑关系),通常概括为集合结构,线性结构,树形结构,图型结构。
通常采用二元组表示:B=(K,R),B为一种数据结构,它由数据元素的集合K和K上二元关系的集合R所组成。当中:
K={ki|i>=1&&i<=n,n>=0}
R={rj|j>=1&&j<=m,m>=0}
ki(rj)为集合K(R)中的第i(j)个数据元素,n(m)为K(R)中数据元素的个数,
集合结构:当n!=0,m=0时数据结构为集合结构,此时数据结构中只存在元素的集合,不存在有关系的集合。
线性结构:元素间存在一对一的关系称为线性结构。常见类型:数组,队列,链表,栈。
树形结构:元素间存在一对多的关系称为树形结构。常见类型:树(如:哈夫曼树)
图形结构:元素间存在多对多的关系称为图形结构。
这里先讲一下集合框架
常用的集合有三种:
1.Set(集合),特点为无序,不可重复,继承了Collection接口。
Set接口常用的子类:HashSet ,TreeSet
以HashSet为例
public void testSet(){
HashSet<String> set = new HashSet<String>();
//添加数据
for(int i=0; i < 10; i++){
String s = "str"+i;
set.add(s);
}
//遍历,打印数据
Iterator<String> it = set.iterator();
while(it.hasNext()){
//取下一个数据
String str = it.next();
System.out.println(str);
}
//迭代循环for遍历
for(String s : set){
System.out.println(s);
}
set.remove("");//删除数据
set.contains("");//判断制定元素是否存在
set.clear();//清空数据
set.isEmpty();//若集合为空返回true
}
2.List(列表:数组和向量,链表,堆栈,队列),特点为可重复,其对象以线性 方式存储,无特定顺序,只有一个开头和一个结尾,继承了Collection接口。
List接口常用的子类:ArrayList、LinkedList、Vector
以ArrayList为例
public void testList(){
//创建一个数组队列,泛型
ArrayList<String> list = new ArrayList<String>();
//往队列中添加10个字符串数据
for(int i=0; i<10; i++){
list.add("str"+i);
}
//删除一条数据并且返回被删除的数据
String s = list.remove(5);
System.out.println("被删除的数据:"+s);
list.add(2, "添加到第二个");
//查找,返回被查找的数据对应的位置
int pos = list.indexOf("str3");
System.out.println("查找结果:"+pos);
//替换
list.set(1, "1111");
//遍历打印
for(int i=0; i<list.size(); i++){
String str = list.get(i);
System.out.println(str);
}
//也可用
for(String ss : list){
System.out.println(ss);
}
}
3.Map(映射),存放两个对象,key与value,二者一一对应。
Map接口常用的子类:HashMap,HashTable,TreeMap
以HashaMap为例
public void testMap(){
HashMap<String, String> map = new HashMap<String, String>();
//存放,value可相同
map.put("111", "张三");
map.put("222", "李四");
map.put("111", "王五");
//删除key对应的数据,并且返回对应的value
map.remove("111");
//根据key值查找value
String name = map.get("222");
System.out.println(name);
//遍历方法1,相同的value都可以打印
Set<String> keySet = map.keySet();
for(String key : keySet){
System.out.println("key="+key);
System.out.println("value="+map.get(key));
}
//遍历方法2,相同的value都可以打印
Set<Entry<String,String>> entrySet = map.entrySet();
for(Entry<String,String> entry : entrySet){
System.out.println("key="+entry.getKey());
System.out.println("value="+entry.getValue());
}
//遍历方法3,只打印相同value的最后一个
Collection<String> values = map.values();
for(String value : values){
System.out.println("value="+value);
}
}