List <note>

①、List list1 = new ArrayList();

    底层数据结构是数组,查询快,增删慢;线程不安全,效率高

②、List list2 = new Vector();

    底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合

③、List list3 = new LinkedList();

    底层数据结构是链表,查询慢,增删快;线程不安全,效率高

     

④、Set:典型实现 HashSet()是一个无序,不可重复的集合

 1、Set hashSet = new HashSet();

  ①、HashSet:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL;

  ②、其底层其实是一个数组,存在的意义是加快查询速度。我们知道在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较,此时的查询效率依赖于查找过程中比较的次数。而 HashSet 集合底层数组的索引和值有一个确定的关系:index=hash(value),那么只需要调用这个公式,就能快速的找到元素或者索引。

  ③、对于 HashSet: 如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

     1、当向HashSet集合中存入一个元素时,HashSet会先调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据hashCode值决定该对象在HashSet中的存储位置

      1.1、如果 hashCode 值不同,直接把该元素存储到 hashCode() 指定的位置

      1.2、如果 hashCode 值相同,那么会继续判断该元素和集合对象的 equals() 作比较

          1.2.1、hashCode 相同,equals 为 true,则视为同一个对象,不保存在 hashSet()中

          1.2.2、hashCode 相同,equals 为 false,则存储在之前对象同槽位的链表上,这非常麻烦,我们应该约束这种情况,即保证:如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

 

注意:每一个存储到 哈希 表中的对象,都得提供 hashCode() 和 equals() 方法的实现,用来判断是否是同一个对象

   对于 HashSet 集合,我们要保证如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同。

 

⑤、Map:key-value 的键值对,key 不允许重复,value 可以

  1、严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。

    2、这两个集合没每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。

    3、因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历。

⑥、Map 和 Set 集合的关系

    1、都有几个类型的集合。HashMap 和 HashSet ,都采 哈希表算法;TreeMap 和 TreeSet 都采用 红-黑树算法;LinkedHashMap 和 LinkedHashSet 都采用 哈希表算法和红-黑树算法。

    2、分析 Set 的底层源码,我们可以看到,Set 集合 就是 由 Map 集合的 Key 组成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,以下是实现安卓开发 compose 现在有一个List<Note> 要实现拖动排序功能jetpack room数据库的 kotlin 代码示例: 首先,您需要在 build.gradle 文件中添加以下依赖: ``` implementation "androidx.compose.foundation:foundation-layout:1.0.0-beta02" implementation "androidx.compose.material:material:1.0.0-beta02" implementation "androidx.compose.runtime:runtime-livedata:1.0.0-beta02" implementation "androidx.compose.ui:ui:1.0.0-beta02" implementation "androidx.compose.ui:ui-tooling:1.0.0-beta02" implementation "androidx.room:room-runtime:2.3.0" kapt "androidx.room:room-compiler:2.3.0" ``` 然后,您可以使用 Jetpack Compose 实现一个可拖动的列表,并使用 Room 数据库存储和加载数据。以下是完整的 Kotlin 代码: ``` import androidx.compose.foundation.background import androidx.compose.foundation.gestures.draggable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.material.Button import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.PrimaryKey import androidx.room.Room import androidx.room.RoomDatabase import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @Entity(tableName = "notes") data class Note( @PrimaryKey val id: Int, @ColumnInfo(name = "text") val text: String, @ColumnInfo(name = "position") var position: Int ) @Dao interface NoteDao { @Query("SELECT * FROM notes ORDER BY position ASC") fun getNotes(): LiveData<List<Note>> @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(note: Note) @Update suspend fun update(note: Note) } @Database(entities = arrayOf(Note::class), version = 2) abstract class AppDatabase : RoomDatabase() { abstract fun noteDao(): NoteDao companion object { private var instance: AppDatabase? = null fun getInstance(context: Context): AppDatabase { return instance ?: synchronized(this) { instance ?: buildDatabase(context).also { instance = it } } } private fun buildDatabase(context: Context): AppDatabase { return Room.databaseBuilder(context, AppDatabase::class.java, "notes.db") .addMigrations(object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { database.execSQL("ALTER TABLE notes ADD COLUMN position INTEGER DEFAULT 0") } }) .build() } } } class NoteViewModel : ViewModel() { private val appDatabase = AppDatabase.getInstance(MyApplication.context) private val noteDao = appDatabase.noteDao() private val _notes = MutableLiveData<List<Note>>() init { loadNotes() } fun getNotes(): LiveData<List<Note>> { return _notes } fun addNote() { viewModelScope.launch(Dispatchers.IO) { val count = noteDao.getNotes().value?.size ?: 0 noteDao.insert(Note(count + 1, "Note ${count + 1}", count + 1)) } } fun updateNotePosition(note: Note, position: Int) { viewModelScope.launch(Dispatchers.IO) { note.position = position noteDao.update(note) } } private fun loadNotes() { viewModelScope.launch(Dispatchers.IO) { val notes = noteDao.getNotes().value ?: emptyList() _notes.postValue(notes) } } } @Composable fun NotesList(noteViewModel: NoteViewModel) { val notes by noteViewModel.getNotes().observeAsState(listOf()) Column(modifier = Modifier.padding(16.dp)) { Button(onClick = { noteViewModel.addNote() }) { Text("Add Note") } for (i in notes.indices) { val note = notes[i] Box( modifier = Modifier .fillMaxSize() .alpha(if (note.position == i) 1f else 0.5f) .background(Color.White) .draggable( orientation = Orientation.Vertical, onDragStarted = { /* Do nothing */ }, onDragStopped = { noteViewModel.updateNotePosition(note, it) } ) ) { Text( text = note.text, modifier = Modifier.padding(16.dp) ) } } } } class MainActivity : ComponentActivity() { private val noteViewModel by viewModels<NoteViewModel>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { NotesList(noteViewModel) } } } ``` 代码说明: 1.定义 Note 实体类,其中包含 id、text 和 position 字段。 2.定义 NoteDao 接口,其中包含 getNotes()、insert() 和 update() 函数。 3.AppDatabase 是一个 Room 数据库,它包含 NoteDao。 4.NoteViewModel 是一个 ViewModel,它包含一个 LiveData 列表,用于存储 Note 对象列表。 5.NotesList 是一个 Composable 函数,它显示 Note 对象列表,并允许用户重新排序它们。 6.在主 Activity 中使用 NotesList Composable 函数。 该代码依赖于 Jetpack Compose 和 Room 数据库。Jetpack Compose 提供了一种简单的方法来实现可拖动的列表,而 Room 数据库用于保存和加载 Note 数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值